The following is a comparison of revision control software.
The following tables include general and technical information on notable revision control and
software configuration management software.
For SCM software not suitable for source code, see Comparison of open source configuration
management software.
General information Table explanation
Software: The name of the application that is described.
Maintainer: The company or group that is currently taking responsibility for the software's maintenance
or development Development Status: The current status of
the software project Repository model: describes the relationship
between various copies of the source code repository.
In a client–server model, 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.
In a distributed model, repositories act as peers, and users typically have a local repository
with version history available, in addition to their working copies.
Concurrency model: describes how changes to the working copy are managed to prevent simultaneous
edits from causing nonsensical data in the repository.
In a lock model, changes are disallowed until the user requests and receives an exclusive
lock on the file from the master repository.
In a merge model, 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.
Note that distributed version control almost always implies a merge concurrency model.
License: The license model under which the software is licensed.
These can be both free and paid licenses Platforms Supported: The operating systems
that the software application currently supports.
Cost: The price of the software application Technical information
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.
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.
Features Table explanation
Software: The name of the application that is described.
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.
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.
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.
End of line conversions: describes whether a system can adapt the end of line characters
for text files such that they match the end of line style for the operating system under
which it is used.
The granularity of control varies.
Subversion, for example, can be configured to handle EOLs differently according to the
file type, whereas Perforce converts all text files according a single, per-client setting.
Tags: indicates if meaningful names can be given to specific revisions, regardless of
whether these names are called tags or labels.
International Support: indicates if the software has support for multiple language environments
and operating system Unicode filename support: indicates if the
software has support for interoperations under file systems using different character encodings.
Supports large repos: Can the system handle repositories of around a gigabyte or larger
effectively?
Advanced features Table explanation
keyword expansion: Supports automatic expansion of keywords such as file revision number.
interactive commits: Interactive commits allow the user to cherrypick the patch-hunks that
become part of a commit, instead of having only a file-level granularity.
external references: embedding of foreign repositories in the source tree
partial checkout/clone: Ability to check out or clone only a specified subdirectory from
a repository.
permissions: Tracks file permission bits in the revision history.
timestamp preservation: Overwrites the last modified filesystem attribute with the commit
time upon checkout.
custom automatic merge tool: Automatic merging can be attempted by any tool of the user's
choice supported formats: either read/write support
or read-only shared build cache of derived objects: the
ability to wink-in derived-objects that were built by other confederated clients that share
exactly the same dependencies instead of rebuilding them locally
Basic commands Table explanation
Commands in green rectangles that are not surrounded by [square brackets] are at an
interactive command-line prompt.
Text in [square brackets] is an explanation of where to find equivalent functionality.
repository init: Create a new empty repository clone: Create an identical instance of a repository
pull: Download revisions from a remote repository to a local repository
push: Upload revisions from a local repository to a remote repository
local branches: Create a local branch that does not exist in the original remote repository
checkout: Create a local working copy from a repository
update: Update the files in a working copy with the latest version from a repository
lock: Lock files in a repository from being changed by other users
add: Mark specified files to be added to repository at next commit
remove: Mark specified files to be removed at next commit
move: Mark specified files to be moved to a new location at next commit
copy: Mark specified files to be copied at next commit
merge: Apply the differences between two sources to a working copy path
commit: Record changes in the repository revert: Restore working copy file from repository
generate bundle file: Create a file that contains a compressed set of changes to a given repository
rebase: Forward-port local commits to the updated upstream head
Advanced commands Table explanation
Commands in green rectangles that are not surrounded by [square brackets] are at an
interactive command-line prompt.
Text in [square brackets] is an explanation of where to find equivalent functionality.
command aliases: create custom aliases for specific commands or combination thereof
lock/unlock: exclusively lock a file to prevent others from editing it
shelve/unshelve: temporarily set aside part or all of the changes in the working directory
rollback: remove a patch/revision from history cherry-picking: move only some revisions from
a branch to another one bisect: binary search of source history for
a change that introduced or fixed a regression incoming/outgoing: query the differences between
the local repository and a remote one grep: search repository for lines matching
a pattern record: include only some changes to a file
in a commit and not others User interfaces
Table explanation Software: The name of the application that
is described.
Web Interface: Describes whether the software application contains a web interface.
A web interface could allow the software to post diagnostics data to a website, or could
even allow remote control of the software application.
GUIs: A GUI is a graphical user interface.
If a software product features a GUI its functionality can be accessed through application windows
as opposed to accessing functionality based upon typing commands at the command prompt
such as a DOS interface.
Plug-ins: functionality is available through an Integrated Development Environment.
Minimum functionality should be to list the revision state of a file and check in/check
out files.
History and adoption Table explanation
Software: The name of the application that is described.
Notable users: is a list of well known projects using the software as their primary revision
control system, excluding the software itself, followed by a link to a full list if available.
History: briefly describes the software's origins and development.
See also List of revision control software
Comparison of free software hosting facilities Notes
References