Top Qs
Timeline
Chat
Perspective

Comparison of version-control software

From Wikipedia, the free encyclopedia

Remove ads

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.

Remove ads

General information

Summarize
Perspective

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.
More information Software, Maintainer ...
Remove ads

Technical information

Summarize
Perspective

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.
More information Software, Programming language ...
Remove ads

Features

Summarize
Perspective

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.
  • 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.
  • 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 to 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?
More information Software, Atomic commits ...
Remove ads

Advanced features

Summarize
Perspective

The following are some more advanced features and capabilities available in notable version-control systems:

Table explanation

  • Keyword expansion: supports automatic expansion of keywords such as file revision number.
  • Interactive commits: interactive commits allow the user to cherrypick common lines of code used to anchor files (patch-hunks) that become part of a commit (leaving unselected changes as changes in the working copy), 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 (hopefully configurable on a per-file basis)
  • Supported formats: either read/write support or read-only (conversion, potentially repeated)
  • Shared build cache of derived objects: the ability to automatically substitute (wink-in) derived-objects that were built by other confederated clients that share exactly the same dependencies instead of rebuilding them locally
More information Software, Keyword expansion ...
Remove ads

Basic commands

Summarize
Perspective

The following table provides further information about commands available in notable version-control systems.

Table explanation

  • Repository init: Create a new empty repository (i.e., version control database)
  • clone: Create an identical instance of a repository (in a safe transaction)
  • 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 (remote) 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 (note: keeps cohesive revision history of before and at the remove.)
  • 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
  • Note: 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.
More information Software, Repository init ...
Remove ads

Advanced commands

Summarize
Perspective

The following table shows the commands used to execute common tasks in notable version-control systems.

Table explanation

  • 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 (instead of merging the branches)
  • 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 (the patches that would be fetched/sent on a pull/push)
  • Grep: search repository for lines matching a pattern
  • Record: include only some changes to a file in a commit and not others
  • Note: 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.
More information Software, Command aliases ...
Remove ads

User interfaces

Summarize
Perspective

The following table gives Web, GUI and IDE Interface specifications for notable version-control systems.

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: functions are available through an integrated development environment. Minimum function should be to list the revision state of a file and check in/check out files.
More information Software, Web interfaces ...
Remove ads

History and adoption

Summarize
Perspective

The following table provides historic background notes on various version-control systems:

Table explanation

  • Software: The name of the application that is described.
  • History: briefly describes the software's origins and development.
  • Notable current 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.
More information Software, History ...
Remove ads

See also

Notes

  1. In 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.
  2. RTC is not a distributed revision control system; but has some distributed feature that can be configured
  3. Various forks of the original Unix sources exist, only one of which is actively maintained
  4. While it is possible for multiple users to edit the same version of a file concurrently, only one of them can write back the changes.
  5. While some forks of SCCS are free software, others remain closed as parts of commercial Unix distributions.
  6. In Subversion, a file attribute enables the lock model on per-file basis. This file attribute can be set automatically using file name wildcard expressions.
  7. Bazaar'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.
  8. A Bazaar bundle is a summary diff, with sufficient extra information to preserve history.
  9. Snapshots with binary files. It's discussed to have binary changesets in future (darcs 3)
  10. 4 MB of which are sqlite3.c
  11. Mercurial revision numbers are local to a repository; they can differ from repository to repository depending on in which order merges are performed.
  12. A 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.
  13. Evil twins are common.Evil Twins in SCM, Not Hollywood Archived 2013-10-16 at the Wayback Machine
  14. Atomic commit can be enabled for individual checkin's ClearCase 7.1.1 release notes.
  15. darcs' patches each bear a unique identifier, impossible to merge twice the same patch in a repository (without destructively modifying history using "unsafe" commands).
  16. Although it stores (and shows by default) 8-bit filename. See FAQ
  17. In the sense that its messages and graphic interfaces have English only localization, though the software is certified running fine on various language operating systems.
  18. Controlled by the 'crnl-glob' setting ()
  19. Git does not explicitly track renames, because by design it does not track individual files. Renames and split of source files are detected after the fact, if the file content does not change dramatically.
  20. Since git-1.7.9 (see release notes Archived 2013-04-15 at archive.today). Older versions do not sign commits, only tags (see the -s option in git-tag(1) Manual page)
  21. UTF-8 filenames are supported as of version 1.7.10 (MSysGit release notes).
  22. Git has some issues with very large repositories. See Section Better big-file support and Section Designing a faster index format in SoC 2012 Ideas.
  23. Integrity enabled change packages provide complete workflow and 21 CFR Part 11 compliant digital signatures against the item controlling the change package.
  24. 2009 SP5 added a feature to merge child development paths.
  25. Mercurial includes internationalization for more than 10 languages as of 2017.
  26. Support depends upon host OS and is well supported under Unix, but not Windows OSs, due to lack of host support. See
  27. It could be done via user level hooks
  28. Perforce will version-control symbolic links themselves, but will not recognise its own version-controlled views (local file trees), if you access them via symbolic links.
  29. Through the process behaviour components: Operation advisors and Operation participants. http://jazz.net/library/article/292
  30. While the source code of SCCS has been written to support internationalisation, only English message texts exist.
  31. StarTeam supports atomic commits as of version 2006
  32. Subversion can move a file and conserve its history, if and only if the target of the move is in the same Subversion repository as the source. Cross-repository moves require third-party tools.
  33. Since SVN 1.8 subversion supports improved move-tracking on the client side. On the server-side it's not supported yet.
  34. "Changeset Signing". Apache Subversion Mailing Lists. Retrieved 2016-08-05.
  35. New to SVN 1.5 <http://subversion.apache.org/docs/release-notes/1.5.html#merge-tracking>. A separate tool "svnmerge" <> provides merge tracking for older versions.
  36. In Subversion, tags are a special case of the more generic "cheap copy" concept of Subversion. Per convention, a tag is a copy into a directory named "tags". Because of this, even tags are versioned. See http://svnbook.red-bean.com/nightly/en/svn.branchmerge.tags.html for more information. The reason for partial support in the table is because Subversion's emulation of tags in this manner does not meet the requirement that the tag name can be used in place of any revision identifier wherever the user may be required to enter one. This column would be meaningless if the definition were to be loosened enough to encompass Subversion's approach as every version control system supports branching and would therefore support tags as well.
  37. in Asian releases (v6.6a to v7.1a) and since version 7.2 in general
  38. Version change history is removed upon rename; old name not referenced.
  39. not implemented yet
  40. Can not be disabled in dynamic views.
  41. Using alias of the CVSROOT/modules file.
  42. CVS records executable bit when a file is added, but does not allow changing it later on.
  43. This is a GUI feature supported by TortoiseCVS and WinCVS both of which include/use CVSNT.
  44. Same as CVS, plus also the ability to have replicated repositories including 'shadow' repositories.
  45. Use the module/directory name or an alias created using CVSROOT/modules or CVSROOT/modules2 administration file.
  46. CVSNT supports this when the make/build tool used also supports it.
  47. Darcs can do sparse checkouts from explicit checkpoints on darcs-1 repositories, but not from darcs-2 ones[citation needed]
  48. Darcs can automatically detect #! scripts and make them executable on checkout.
  49. Checkouts can be nested with "fossil open –nested"
  50. The Git FAQ states that keyword expansion is not a good thing
  51. add -i and add -p, see git-add(1) Manual Page
  52. The Git FAQ explains why preserving modification time is considered harmful
  53. Configurable on server as a Project Option and on the client as a User Option.
  54. Through third-party tools such as Tortoise SVN.
  55. SVN can not preserve file modification times. On request by the client, it can restore check-in time as last-modified time. Disabled by default.
  56. MIME type of the file must be detected as a "human-readable" MIME type, even if the merge tool can work with non-human-readable files
  57. Standalone Branch, archived from the original on 2016-03-04, retrieved 2014-11-06
  58. Shared Repository, archived from the original on 2016-03-04, retrieved 2014-11-06
  59. Standalone Branch, archived from the original on 2016-03-04, retrieved 2014-11-06
  60. Heavyweight Checkout and Lightweight Checkout, archived from the original on 2016-06-30, retrieved 2014-11-06
  61. rebase plugin
  62. darcs doesn't have named branches, local or not, branching is handled solely through repository cloning
  63. darcs send prepares a bundle of patches, defaults to sending it by mail but can send it to a file instead
  64. copies are detected after the fact, much like renames
  65. Mercurial Bookmarks are similar to local branches.
  66. SCCS has implicit locks, applied when checking out via edit, removed when creating a delta.
  67. Through any of various means, place (to-be-immutable) file in an immutable directory prior to vcheckin.
  68. mv(1) or link(2) the immutable file from its origin immutable directory to its destination immutable directory prior to vcheckin.
  69. Through any of various means, copy the immutable file from its origin immutable directory to its destination immutable directory prior to vcheckin.
  70. One can also enable this as a central preference in the repository server control panel or configuration file.
  71. Requires administrator privileges. One can 'roll back' a change using 'cvs update -e -j @commitid -j "@<commitid"' but the change and rollback evidence remain in the history.
  72. yes - use TortoiseCVS or WinCVS to commit the change to the destination and select which specific files to keep
  73. bisect is also available for cvs which should work with CVSNT
  74. darcs operate on patches not revision, cherrypicking simply consists in pulling a given patch from one repository to another one as long as the dependencies are fulfilled
  75. fossil stash supports multiple shelves with comments.
  76. git stash is a multi-level shelve, it's possible to shelve several change groups at the same time
  77. Only works on a local repository and only on revisions without children. The disapprove command might be an alternative.
  78. experimental in SVN 1.10 (release notes)
  79. SVN Bisect tool svn-bisect
  80. svn status lists differences between working copy and repository, not differences between two repositories
  81. hgweb for single-repository access and hgwebdir for multiple repository access from a single HTTP address
Remove ads

References

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads