Revision control (also known as version control , source control or (source) code management (SCM) ) is the management of changes to documents, programs, and other information stored as computer files. It is most commonly used in software development, where a team of people may be changing the same files. Changes are usually identified by a number or letter code, termed the "revision number", "revision level", or simply "revision". For example, an initial set of files is "revision 1". When the first change is made, the resulting set is "revision 2", and so on. Each revision is associated with a timestamp and the person making the change. Revisions can be compared, restored, and with some types of files, merged.

Version control systems (VCS) are most commonly stand-alone applications, but revision control is also embedded in various types of software like word processors (e.g. OpenOffice.org Writer, Microsoft Word, KOffice, Pages, Google Docs), spreadsheets (e.g. OpenOffice.org Calc, Google Spreadsheets, Microsoft Excel), and in various content management systems. Integrated revision control is a key feature of wiki software packages such as MediaWiki, DokuWiki, TWiki, etc. In wikis, revision control allows for the ability to revert a page to a previous revision, which is critical for allowing editors to track each other's edits, correct mistakes, and defend public wikis against vandalism and spam.

Software tools for revision control are increasingly recognized as being necessary for the organization of multi-developer projects.

Overview

Engineering revision control developed from formalized processes based on tracking revisions of early blueprints or bluelines. Implicit in this control was the ability to return to any earlier state of the design, for cases in which an engineering dead-end was reached in the development of the design. Likewise, in computer software engineering, revision control is any practice that tracks and provides control over changes to source code. Software developers sometimes use revision control software to maintain documentation and configuration files as well as source code. Also, version control is widespread in business and law. Indeed, "contract redline" and "legal blackline" are some of the earliest forms of revision control, and are still employed with varying degrees of sophistication. An entire industry has emerged to service the document revision control needs of business and other users, and some of the revision control technology employed in these circles is subtle, powerful, and innovative. The most sophisticated techniques are beginning to be used for the electronic tracking of changes to CAD files (see Product Data Management), supplanting the "manual" electronic implementation of traditional revision control.

As software is designed, developed and deployed, it is extremely common for multiple versions of the same software to be deployed in different sites, and for the software's developers to be working simultaneously on updates. Bugs and other issues with software are often only present in certain versions (because of the fixing of some problems and the introduction of others as the program develops). Therefore, for the purposes of locating and fixing bugs, it is vitally important to be able to retrieve and run different versions of the software to determine in which version(s) the problem occurs. It may also be necessary to develop two versions of the software concurrently (for instance, where one version has bugs fixed, but no new features (branch), while the other version is where new features are worked on (trunk)).

At the simplest level, developers could simply retain multiple copies of the different versions of the program, and number them appropriately. This simple approach has been used on many large software projects. While this method can work, it is inefficient as many near-identical copies of the program have to be maintained. This requires a lot of self-discipline on the part of developers, and often leads to mistakes. Consequently, systems to automate some or all of the revision control process have been developed.

Moreover, in software development and other environments, including in legal and business practice, it is increasingly common for a single document or snippet of code to be edited by a team, the members of which may be geographically dispersed and/or may pursue different and even contrary interests. Sophisticated revision control that tracks and accounts for ownership of changes to documents and code may be extremely helpful or even necessary in such situations.

Another use for revision control is to track changes to configuration files, such as those typically stored in /etc or /usr/local/etc on Unix systems. This gives system administrators another way to easily track changes to configuration files and a way to roll back to earlier versions should the need arise.

Source management models

Traditional revision control systems use a centralized model, where all the revision control functions are performed on a shared server. If two developers try to change the same file at the same time, without some method of managing access the developers may end up overwriting each other's work. Centralized revision control systems solve this problem in one of two different "source management models": file locking and version merging.

File locking

The simplest method of preventing "concurrent access" problems is to lock files so that only one developer at a time has write access to the central "repository" copies of those files. Once one developer "checks out" a file, others can read that file, but no one else is allowed to change that file until that developer "checks in" the updated version (or cancels the checkout).

File locking has merits and drawbacks. It can provide some protection against difficult merge conflicts when a user is making radical changes to many sections of a large file (or group of files). However, if the files are left exclusively locked for too long, other developers may be tempted to bypass the revision control software and change the files locally, leading to more serious problems.

Version merging

Most version control systems, such as CVS, allow multiple developers to edit the same file at the same time. The first developer to "check in" changes to the central repository always succeeds. The system provides facilities to merge changes into the central repository, so the changes from the first developer are preserved when the other developers check in.

The second developer checking in code, will need to take care with the merge, to make sure that the changes are compatible and that the merge operation does not introduce its own logic errors within the program.

The concept of a reserved edit can provide an optional means to explicitly lock a file for exclusive write access, even though a merging capability exists.

Distributed revision control

Distributed revision control (DRCS) takes a peer-to-peer approach, as opposed to the client-server approach of centralized systems. Rather than a single, central repository on which clients synchronize, each peer's working copy of the codebase is a bona-fide repository. Synchronization is conducted by exchanging patches (change-sets) from peer to peer. This results in some important differences from a centralized system:

  • No canonical, reference copy of the codebase exists by default; only working copies.
  • Common operations such as commits, viewing history, and reverting changes are fast, because there is no need to communicate with a central server. Rather, communication is only necessary when pushing or pulling changes to or from other peers.
  • Each working copy is effectively a remote backup of the codebase and change history, providing natural security against data loss.

Open systems

An open system of distributed revision control is characterized by its support for independent branches, and its heavy reliance on merge operations. Its general characteristics are:

  • Every working copy is effectively a branch.
  • Each branch is actually implemented as a working copy, with merges conducted by ordinary patch exchange, from branch to branch.
  • Code forking is therefore easier to accomplish, where desired, because every working copy is a potential fork. (By the same token, undesirable forks are easier to mend because, if the dispute can be resolved, re-merging the code is easy.)
  • It may be possible to "cherry-pick" single changes, selectively pulling them from peer to peer.
  • New peers can freely join, without applying for access to a server.

One of the first open systems was BitKeeper, notable for its use in the development of the Linux kernel. A later decision by the makers of BitKeeper to restrict its licensing led the Linux developers on a search for a free replacement. Common open systems now in free use are:

  • Bazaar, currently used by Ubuntu and MySQL;
  • Darcs;
  • Git, created by Linus Torvalds, influenced by BitKeeper and Monotone, aiming at very high performance, currently used for the Linux Kernel, X.org, and under investigation by KDE;
  • Mercurial, started with same aims as Git, currently used by Mozilla project, NetBeans and OpenJDK (as well as other open source Sun

    System.Version Class

    public sealed class Version : ICloneable, IComparable, IComparable , IEquatable

    ...

    TikiWiki, Content Management System, Version 3.2 Released! | MyTestBox ...

    Tiki version 3.2 is now released and available for download with 200 new fixes and enhancements. The new features and functions improved in this release include

    ...

    Concept Systems Software Version 4

    Concept Systems provides dynamic software and consulting services that are used by organizations for consensus building, decision-making, planning, development, and evaluation.

    ...

    Version Class

    Represents the version number for a common language runtime assembly. This class cannot be inherited. For a list of all members of this type, see Version Members.

    ...

    Vote System version 1.0.0 | PHP Polls & Voting | Hot Scripts

    Vote System version 1.0.0 . PHP Polls & Voting from Hot Scripts. Vote system 1.0.0 is a bar graph system giving percent values.

    ...

    System Version Control

    rPath Corporate Site ... The reality is that organizations without a strong version control platform for managing their deployed systems are flying blind—they simply have little ...

    ...

    System Version Release Document - What does SVRD stand for? Acronyms ...

    Acronym Definition; SVRD: Single Vehicle Road Departure: SVRD: System Version Release Document

    ...

    Version Class (System)

    Represents the version number for a common language runtime assembly. This class cannot be inherited.

    ...

    X Window System Version 11 - What does X11 stand for? Acronyms and ...

    Acronym Definition; X11: X Window System Version 11

    ...

    Vote System version 1.0.0 | Get Vote System version 1.0.0 at ...

    Get Vote System version 1.0.0 at SourceForge.net. Fast, secure and free downloads from the largest Open Source applications and software directory

    ...