a note on git and renames.
← Revision 100 as of 2009-05-14 18:26:53
converted to 1.6 markup
|Deletions are marked like this.||Additions are marked like this.|
|Line 1:||Line 1:|
|/!\ This chart is a rough draft /!\||There was a comparison of version control systems here, but it was of limited use and has been removed. See instead the [[Bzr]] feature list.|
|Line 3:||Line 3:|
|= Overview =
||RCS Name ||Bazaar-NG||Arch||CVS||Subversion||Git ||Hg || Monotone|| Darcs ||
||Decentralized || Yes ||Yes || No||No ||Yes ||Yes || Yes ||Yes ||
||Simple/No Namespace||Yes ||No || No||Yes || ||No ||No ||Yes ||
||Optional Repository|| None||Req ||Req||Req || || || || ||
||Supports Renames|| Yes ||Yes || No||Yes ||Yes[#2 (2)]||No[#1 (1)]||Yes ||Yes ||
||Has Checkouts || Yes ||Yes ||Yes||Yes || || || ||No ||
||Has Revisions || Yes ||Yes ||No ||Yes || || || || ||
||Smart Merge || Yes ||Yes|| No ||No ||No? || ||Yes ||Yes ||
||Cherrypicks || Yes ||Yes ||Yes||Yes || ||Yes || ||Yes ||
||Plugins || Yes ||No ||No || || || || || ||
(note: it would be interesting to have a small benchmark too, like "time to run XXX diff/import/commit in the linux kernel",)
= Details about each feature =
== Decentralized ==
Whether the tool is designed to allow branches of the same project to be in different remote repositories.
== Simple/No Namespace ==
The namespace is the way a revision control system identifies a revision uniquely. It can be user-visible (GNU Arch), or tool internal (bzr, git, ...).
== Optional Repository ==
== Supports Renames ==
Whether the tool supports file renaming and merging changes to a renamed file.
== Has Checkouts ==
A [Checkout checkout] is a working tree with a relatively small amount of metadata.
== Has Revisions ==
== Smart Merge ==
Whether the tool is able to know which revisions have to be merged (recording merge history is a necessary condition for this).
== Cherrypicks ==
Whether the tool records Cherrypick history.
== Plugins ==
Whether the tool is extensible with plugins.
= Footnotes =
[[Anchor(1)]] 1. Support for renames in hg is being implemented. Unlike bzr, it uses rename history instead of unique file ID.
[[Anchor(2)]] 2. Git has a very particular management of renames. It does not track renames at commit time at all. However, it "guesses" them at merge time. Since it uses hashes, it can immediately see renames without modifications, and otherwise, it has to use a heuristic to find the file with the closest content. Linus claims that this is the best model, while other find it completely broken. See for example [http://morel.lionel.free.fr/atom.xml this post].
|See also [[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software|Comparison of Revision Control Software]] on wikipedia for another relatively complete comparison.|