The following tables describe attributes of notable version control and software configuration management (SCM) systems that can be used to compare and contrast the various systems.

For SCM software not suitable for source code, see Comparison of open-source configuration management software.

General information

The following table contains relatively general attributes of version-control software systems, including: Repository model, the relationship between copies of the source code repository Client–server, users access a master repository via a client; typically, their local machines hold only a working copy of a project tree. Changes in one working copy must be committed to the master repository before they are propagated to other users. Distributed, repositories act as peers, and users typically have a local repository with version history available, in addition to their working copies. Concurrency model, how changes to the working copy are managed to prevent simultaneous edits from causing nonsensical data in the repository. Lock, changes are disallowed until the user requests and receives an exclusive lock on the file from the master repository. Merge, users may freely edit files, but are informed of possible conflicts upon checking their changes into the repository, whereupon the version control system may merge changes on both sides, or let the user decide when conflicts arise. Distributed version control systems usually use a merge concurrency model.

Software Maintainer Development status Repository model Concurrency model License Supported platforms Financial cost AccuRev SCM Micro Focus Discontinued, merged with Dimensions CM Client–server Merge or lock Most Java Platforms (Unix-like, Windows, macOS) Azure DevOps Microsoft Client–server, Distributed Merge or lock Windows, cross-platform via Azure DevOps Services GNU Bazaar Canonical Unmaintained, forked as Breezy Distributed and Client–server Merge Unix-like, Windows, macOS BitKeeper BitMover Inc. Unmaintained Distributed Merge Unix-like, Windows, macOS IBM DevOps Code ClearCase IBM Client–server Merge or lockIn ClearCase, a trigger may be set to allow for the lock model, and this is done at many sites. However, ClearCase development usually takes place on private branches where each developer is given their own branch, so the lock vs. merge concurrency model doesn't matter as much. Code is merged back to the main branch once the developer is ready to deliver their code to the project. Linux, Windows, AIX, Solaris, HP UX, IBM i, OS/390, z/OS, Code Co-op Reliable Software Discontinued Distributed Merge Windows Concurrent Versions System The CVS Team Unmaintained Client–server Merge Unix-like, Windows, macOS CVSNT March Hare Software and community members Unmaintained Client–server Merge or lock Unix-like, Windows, macOS, IBM i darcs The Darcs team Distributed Merge Unix-like, Windows, macOS Dat The Dat team Unmaintained Distributed Merge Unix-like, Windows, macOS Dimensions CM OpenText Client–server Merge or lock Windows, Linux, Solaris, AIX, HP UX, z/OS Fossil D. Richard Hipp Distributed Merge POSIX, Windows, macOS, Other Git Junio Hamano Distributed Merge POSIX, Windows, macOS, Linux GNU arch Andy Tai Unmaintained Distributed Merge Unix-like, Windows, macOS IC Manage IC Manage Inc. Client–server Merge or lock Unix-like, Windows, macOS PTC Integrity PTC Discontinued Client–server Merge or lock Unix-like, Windows Mercurial Mercurial Community Distributed Merge Unix-like, Windows, macOS Microsoft Visual SourceSafe Microsoft Discontinued Shared Folder Merge or lock Windows Monotone Nathaniel Smith, Graydon Hoare Unmaintained Distributed Merge Unix-like, Windows, macOS Perforce P4 Perforce Client–server and Distributed Merge or lock Unix-like, Windows, macOS PVCS OpenText Discontinued, merged with Dimensions CM Client–server Lock Windows, Unix-like IBM Rational Team Concert IBM Discontinued Client–serverRTC is not a distributed revision control system; but has some distributed feature that can be configured Merge or lock Linux, Windows, AIX, Solaris, HP UX, IBM i, OS/390, z/OS, macOS Rational Synergy IBM Client–server and Distributed Merge or lock Linux, Windows, Unix-like Revision Control System Thien-Thi Nguyen Unmaintained Local Merge or lock Unix-like Source Code Control System Jörg SchillingVarious forks of the original Unix sources exist, only one of which is actively maintained Unmaintained Local LockWhile it is possible for multiple users to edit the same version of a file concurrently, only one of them can write back the changes. Unix-like, macOS StarTeam Borland (Micro Focus) Discontinued Client–server Merge or lock Windows and Cross-platform via Java based client Subversion Apache Software Foundation Client–server Merge or lockIn Subversion, a file attribute enables the lock model on per-file basis. This file attribute can be set automatically using file name wildcard expressions. Unix-like, Windows, macOS Surround SCM Perforce Unmaintained Client–server Merge or lock Linux, Windows, macOS Unity Version Control Unity Technologies Client–server and Distributed Merge or lock Linux, Windows, macOS Vault SourceGear LLC Client–server Merge or lock Unix-like, Linux, Windows Vesta Compaq Discontinued Distributed NFS-protocol-emulation choice to optionally confederate clients and/or servers Lock on branch; merge branch-to-branch Tru64, Linux Software Maintainer Development status Repository model Concurrency model License Supported platforms Financial cost

Technical information

The following table shows technical details of some well-known version-control software. These are classified based on the following headers:

Table explanation Software: The name of the application that is described. Programming language: The coding language in which the application is being developed Storage Method: Describes the form in which files are stored in the repository. A snapshot indicates that a committed file(s) is stored in its entirety—usually compressed. A changeset, in this context, indicates that a committed file(s) is stored in the form of a difference between either the previous version or the next. Scope of change: Describes whether changes are recorded for individual files or for entire directory trees. Revision IDs: are used internally to identify specific versions of files in the repository. Systems may use pseudorandom identifiers, content hashes of revisions, or filenames with sequential version numbers (namespace). With Integrated Difference, revisions are based on the Changesets themselves, which can describe changes to more than one file. Network protocols: lists the protocols used for synchronization of changes. Source code size: Gives the size of the source code in megabytes.

Software Programming language Storage method Scope of change Revision IDs Network protocols Source code size AccuRev SCM C++, Java Changeset File Number pair NN/NN custom Azure DevOps C++ and C# Changeset File and Tree Numbers SOAP over HTTP or HTTPS, SSH GNU Bazaar Python 2, Pyrex (optional), CBazaar's critical modules are written in Pyrex. They are automatically translated to pure C; except for the patience sorting module, used in merge resolution, which is written directly in the C language. Snapshot Tree Pseudorandom custom, custom over SSH, custom over HTTP, HTTP, SFTP, FTP, email bundles,A Bazaar bundle is a summary diff, with sufficient extra information to preserve history. WebDAV (with plugin) 4.1 MB BitKeeper C Changeset Tree Changeset keys, numbers custom, HTTP, rsh, SSH, email 99 MB CA Software Change Manager C, C++, Java, HTML Changeset and Snapshot File and Tree Numbers HTTP, TCP/IP IBM DevOps Code ClearCase C, Java, Perl Changeset File and Tree Numbers custom (CCFS), custom (MVFS filesystem driver), HTTP Code Co-op C++ Changeset User ID-Ordinal e-mail (MAPI, SMTP/POP3, Gmail), LAN CVS C Changeset File Numbers pserver, SSH 10.3 MB CVSNT C++ Changeset File and Tree Numbers custom over SSH, sspi, sserver, gserver, pserver 55 MB darcs Haskell Changeset (Patch)Snapshots with binary files. It's discussed to have binary changesets in future (darcs 3) Tree n/a custom over SSH, HTTP, email 1.7 MB Dimensions CM C, C++, Java, C# Snapshot or changeset File and Tree Numbers Custom, HTTP/HTTPS Fossil C Snapshot or changeset Tree SHA-1 or SHA-3 hashes HTTP/HTTPS, custom over SSH 7.2 MB4 MB of which are sqlite3.c Git C, shell scripts, Perl Snapshot Tree SHA-1 or SHA-256 hashes custom (git), custom over SSH, HTTP/HTTPS, rsync, email, bundles 23 MB GNU arch C, shell scripts Changeset Tree Numbers HTTP, WebDAV IC Manage C++, C Changeset Numbers custom Mercurial Python, C Changeset Tree Numbers,Mercurial revision numbers are local to a repository; they can differ from repository to repository depending on in which order merges are performed. SHA-1 hashes custom over SSH, HTTP, email bundles (with standard plugin) 20 MB MKS Integrity C, Java Changeset File Numbers custom, HTTP Monotone C++ HybridA Monotone's revisions represent changesets and its manifests represent snapshots, each revision is linked to some manifest. But manifests are legacy constructs, they aren't kept in the database anymore and reconstructed on the fly if needed. The real work now happen in rosters which are hybrid snapshot/changeset structures. Tree SHA-1 hashes custom (netsync), custom over SSH, file system 4.4 MB Perforce Helix Core C++, C Changeset Tree Numbers custom PVCS C++, C Changeset File Numbers Rational Team Concert Java Changeset Tree Numbers REST services over HTTP/HTTPS Revision Control System C Changeset File Numbers File system 5.3 MB Source Code Control System C Changeset File Numbers NFS 1.3 MB StarTeam C++, C, Java Snapshot File and Tree MD5 hashes custom, TCP/IP Subversion C Changeset and Snapshot Tree Numbers custom (svn), custom over SSH, HTTP and SSL (using WebDAV) 41 MB Surround SCM C++ Changeset File and Tree Numbers TCP/IP Synergy Java Changeset (text), Snapshot(binary) File Numbers custom, custom over SSH, HTTP Vault C# Changeset File and Tree Numbers HTTP, HTTPS Vesta C++ Snapshot Tree NFS 15.8 MB Visual SourceSafe C Snapshot File Numbers SMB, DCOM Software Programming language Storage method Scope of change Revision IDs Network protocols Source code size

Features

The following table classifies some well-known software on the basis of its features and capabilities:

Table explanation Software: The name of the application that is described. Supports Git data format: able to natively work on Git's repository formats Atomic commits: refers to a guarantee that all changes are made, or that no change at all will be made. File renames: describes whether a system allows files to be renamed while retaining their version history. Merge file renames: describes whether a system can merge changes made to a file on one branch into the same file that has been renamed on another branch (or vice versa). If the same file has been renamed on both branches then there is a rename conflict that the user must resolve. Symbolic links: describes whether a system allows revision control of symbolic links as with regular files. Versioning symbolic links is considered by some people a feature and some people a security breach (e.g., a symbolic link to /etc/passwd). Symbolic links are only supported on select platforms, depending on the software. Pre-/post-event hooks: indicates the capability to trigger commands before or after an action, such as a commit, takes place. Signed revisions: refers to integrated digital signing of revisions, in a format such as OpenPGP. Merge tracking: describes whether a system remembers what changes have been merged between which branches and only merges the changes that are missing when merging one branch into another.