In the software development process, revision control, also known as version control or source control, is the management of changes made over time. These changes can be to source code, project assets, or any other information that goes into the finished product. It permits many people to work on the same parts of a project without worrying that their changes will overwritten by others. The collection of revisions and their metadata is called a repository or repo. The repository represents a step-by-step chronological record of every change made to help project managers revert all or part of the project to a previous state if necessary.
How revisions are made
Revision control systems are usually hosted on a networked server. After the repository is set up, using it generally involves the following steps:
- If the developer has created a new file that should become part of the project, the file must be added to the repository. The file is uploaded to the repository, and anyone else working on the project can see and use the file.
- If the developer wants to edit a file part of the project, the file must be checked out. Checking out downloads the desired file revision to the developer's local product version. Usually, the revision that a developer wants to edit is the most recent revision: this revision is known as the "head."
- After the developer edits the file locally and is ready to add it to the official version of the project, the file can be checked in. This action is also known as making a commit. The developer is asked to write a summary of what changes were made and why. With the updated file version, these comments are uploaded to the repository.
- If someone else has checked in revisions to the same file since the last time the developer checked it out, the system announces that there are conflicts. It calculates the differences line-by-line, and the developers who made the changes must agree upon how their individual changes should be merged. The merging is usually done manually: the developers compare the conflicting versions and decide how to resolve them in one document.
- If there are no conflicts, the new version is updated in the repository, and the entire project receives a new revision number, permanently and uniquely identifying its current state.
Branching the development tree
Experimental changes are often made to the main version of a software project. Using revision control, these changes can be made to a separate copy of the project without interfering with developing the main version. The terminology for this approach uses the metaphor of a tree: the main version of the project is called the trunk, and experimental versions are known as branches.
Centralized vs. distributed systems
If a revision control system uses a centralized repository, its data is in a single database containing the authoritative version of all project files. Other systems employ a distributed model. In these systems, changes can be checked and then synchronized between repositories.
List of revision control software
|Aegis||Used for TDD (test-driven development). Every change must include one or more tests that are shown to fail when executed against the currently checked-in code and to pass when executed against the newly changed code. Operates on top of a separate version control system, usually RCS (revision control system) or SCCS (source code control system). Free, open-source, and licensed under the GPL (general public license).||Aegis|
|ArX||A distributed revision control system that began as a fork of GNU (GNU's Not Unix) Arch. Primarily developed between 2003 and 2005.||ArX|
|Autodesk Vault||A specialized revision control system for various Autodesk CAD (computer-aided design) software products, including Autodesk Inventor Professional, AutoCAD Mechanical, AutoCAD Electrical, and Autodesk Revit. Allows designers to re-use previous designs rather than starting from scratch and to access complicated 3-D schematics from any point in their design process.||Autodesk Vault|
|Azure DevOps Server||A software and system package developed by Microsoft, providing source code management and collaborative tools for software development. Azure DevOps Server also provides applications that facilitate project reporting, automated builds, lab management, testing, and release management. Designed to integrate with most IDE (integrated development environment) or editor tools.||Azure DevOps Server|
|Bazaar||A distributed revision control system is also known as GNU Bazaar. Its development is sponsored by Canonical, who also develops the Ubuntu Linux distribution. Runs on Linux, macOS, and Windows. Facilitates working with repositories from other systems such as CVS (Concurrent Versions System), Subversion, Git, Mercurial, Darcs, and Perforce.||Bazaar|
|BitKeeper||Proprietary software used to manage development of the Linux kernel from 2002 through 2005. Available for many operating systems, including AIX (advanced interactive executive), BSD (Berkeley Software Distribution), HP-UX (Hewlett-Packard Unix), IRIX, Solaris, Linux, and Microsoft Windows.||BitKeeper|
|Code Co-op||A revision control system that uses peer-to-peer communications to synchronize and control revisions, rather than a centralized server. Supports commits by e-mail. Runs on Microsoft Windows.||Code Co-op|
|Concurrent Versions System||First developed in 1986, CVS is a venerable and influential revision control system, last updated in 2008. While still used for smaller projects, CVS lacks many of the characteristics of modern revision control that are crucial for large-scale professional software development. Variants of CVS include CVSNT, which supports case-insensitive file names, and OpenCVS, which uses stronger security methods.||Concurrent Versions System|
|Darcs||A distributed system written and heavily influenced by the Haskell programming language. Supports commits via e-mail. Operates on Unix, Linux, BSD, macOS, and Microsoft Windows systems. Open source and licensed under the GPL (GNU General Public License).||Darcs|
|Fossil||A comprehensive management system comprising distributed revision control, bug tracking, and collaborative wiki software. Includes a browser-based interface and command-line tools. Operates on Linux, BSD, macOS, and Windows. Free, open source, and released under a BSD software license.||Fossil|
|Git||A distributed revision control system designed and implemented by Linus Torvalds for developing the Linux kernel. First released in 2005, Git is now the most widely-used version control system in the world. The software is free, open source, and released under the GPL.||Git|
|GNU Arch||A distributed revision control system developed as part of the GNU Free Software Project. It is still in use, but development is limited to security fixes. It has largely been supplanted by GNU Bazaar.||GNU Arch|
|IBM Rational ClearCase||A family of software tools developed by IBM that includes software configuration management and revision control. It supports two models of project management: UCM (unified change management) and a model called "Base ClearCase" that allows greater configuration for an organization's specific needs. It runs on AIX, HP-UX, Linux, zLinux, Solaris, z/OS, and Microsoft Windows.||IBM Rational ClearCase|
|IBM Rational Synergy||Software Configuration Management software that provides project management capabilities, including revision control for all development assets including binary files such as images. Includes a change management tool called Rational Change. Runs on AIX, HP-UX, Linux, Solaris, and Windows.||IBM Rational Synergy|
|IBM Rational Team Concert||An Agile ALM (application lifecycle management) solution from IBM. Focuses on giving high-level visibility into project activities and the progress of individual teams per Agile development methods.||IBM Rational Team Concert|
|IC Manage||A commercial design data management software system that provides revision control and bug tracking. Used primarily for industrial design projects such as manufacturing NVIDIA GPU (graphics processing unit) chips.||IC Manage|
|Mercurial||A distributed revision control system developed as an open source replacement for BitKeeper. Runs on Linux, BSD, OS X, and Windows.||Mercurial|
|Monotone||A peer-to-peer revision control system similar to GNU Arch, Subversion, Git, and Mercurial. Runs on Unix, Linux, BSD, OS X, and Windows. Free, open source, and licensed under the GPL.||Monotone|
|PTC Integrity||An SSLM (software system lifecycle management) system formerly known as MKS Integrity. Provides a collaborative environment, primarily for engineering organizations. It facilitates revision control, requirements management, engineering change management, build management, test management, and software deployment. Runs on any platform that supports Java.||PTC Integrity|
|Perforce||A proprietary, commercial revision control system consisting of a primary database and a central repository. Supports Git clients and its own. Plugins are available for integration with Eclipse, Visual Studio, and IntelliJ IDEA.||Perforce|
|Plastic SCM||A proprietary, commercial revision control tool that offers custom GUI (graphical user interface) management clients and integration with Eclipse, Visual Studio, and IntelliJ IDEA. Runs on Linux, OS X, and Microsoft Windows.||Plastic SCM|
|PVCS||A revision control system for Windows, Linux, and BSD systems, also known as Polytron Version Control System or PVCS Version Manager. Supports "parallel histories" that allow multiple users to edit the same file without merging the changes at commit time.||PVCS|
|Quma Version Control System||A revision control system also known as QVCS, created for the Amiga in 1998. Today, it runs on Microsoft Windows, OS X, and Solaris. Its codebase is written in Java.|
|RCS||A venerable and influential system created in 1982, also known as the original Revision Control System.||RCS|
|SCCS||An early revision control system also known as source code control system. Developed in the SNOBOL (StriNg Oriented and symBOlic Language) language at Bell Labs in 1972, later re-written in C for Unix. Most modern versions of Unix still include a version of SCCS.||SCCS|
|SolidWorks Enterprise PDM||A data management system that provides its own API (application programming interface) for maximum configurability via custom code. Chiefly used for CAD (computer-aided design) application assets and data. Runs on Windows 7 and Windows 8.||SolidWorks Enterprise PDM|
|SourceAnywhere||A commercial, proprietary revision control system that maintains a central repository stored in a Microsoft SQL (Structured Query Language) server. Runs on Microsoft Windows operating systems.||SourceAnywhere|
|StarTeam||A revision control system that focuses on usability by multiple development teams in different locations. It supports Microsoft SQL Server and Oracle database for its repository. It operates on Windows operating systems and RHEL (Red Hat Enterprise Linux).||StarTeam|
|Subversion||Originally designed as a successor to CVS, also known as Apache Subversion or SVN. Extremely popular with the free software community and in large-scale corporate software development. Fully cross-platform, free, and open source, released under the Apache license.||Subversion|
|Sun WorkShop TeamWare||A distributed revision control system also known as Forte TeamWare and Forte Code Management Software. Developed by Sun Microsystems, used to develop Sun's largest software projects, including Solaris and Java.||Sun WorkShop TeamWare|
|Vault||Commercial, proprietary revision control system intended as a replacement option for Microsoft's Visual Source Safe. Built on Microsoft .NET and uses Microsoft SQL Server. Runs on most versions of Windows.||Vault|
|Veracity||Distributed revision control system that also provides bug tracking and build management for Agile development teams. Free and open source, released under the Apache license.||Veracity|
|Visual SourceSafe||A source control software package released by Microsoft, highly influential due to its wide adoption. Discontinued in 2005 after widespread criticism of its stability.||Visual SourceSafe|