Size: 2713
Comment: a note on git and renames.
|
Size: 3588
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
This page is a user-oriented comparison of different revision control system. For a more technical comparison, see ["RCSChoices" RCSChoices]. See also ["SCMComparisons" SCMComparisons] for a brief presentation of each system and how they compare to Bazaar in particular. |
|
Line 5: | Line 7: |
||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 || || || || || || |
||RCS Name ||Bazaar-NG||Arch||CVS||Subversion||Git ||Hg ||Monotone || Darcs || ||Decentralized || Yes ||Yes ||No ||No[#3 (3)]||Yes ||Yes ||Yes ||Yes || ||Simple/No Namespace||Yes ||No ||No ||Yes || ||No ||No ||Yes || ||Supports Renames || Yes ||Yes ||No ||Yes ||Yes[#2 (2)]||No[#1 (1)]||Yes ||Yes || ||Optional Repository||None ||Req ||Req||Req || || || || || ||Has standalone branches||Yes||No ||No ||No ||Yes? ||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 || || || || || || |
Line 32: | Line 35: |
What does "req" mean? |
|
Line 43: | Line 48: |
== Has standalone branches == A StandaloneBranch is a directory containing both a working tree and the history. |
|
Line 59: | Line 68: |
[[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]. | [[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://www.mail-archive.com/git@vger.kernel.org/msg03711.html this post]. [[Anchor(3)]] 3. Subversion is surely not a decentralized revision control system (see for example [http://subversion.tigris.org/subversion-linus.html this page] if you're not convinced). However, [http://svk.elixus.org/ svk] is built on top of subversion and is a decentralized revision control system. |
This chart is a rough draft
This page is a user-oriented comparison of different revision control system. For a more technical comparison, see ["RCSChoices" RCSChoices]. See also ["SCMComparisons" SCMComparisons] for a brief presentation of each system and how they compare to Bazaar in particular.
Overview
RCS Name |
Bazaar-NG |
Arch |
CVS |
Subversion |
Git |
Hg |
Monotone |
Darcs |
Decentralized |
Yes |
Yes |
No |
No[#3 (3)] |
Yes |
Yes |
Yes |
Yes |
Simple/No Namespace |
Yes |
No |
No |
Yes |
|
No |
No |
Yes |
Supports Renames |
Yes |
Yes |
No |
Yes |
Yes[#2 (2)] |
No[#1 (1)] |
Yes |
Yes |
Optional Repository |
None |
Req |
Req |
Req |
|
|
|
|
||Has standalone branches||Yes||No ||No ||No ||Yes? ||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
?
What does "req" mean?
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
?
Has standalone branches
A StandaloneBranch is a directory containing both a working tree and the history.
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://www.mail-archive.com/git@vger.kernel.org/msg03711.html this post].
Anchor(3) 3. Subversion is surely not a decentralized revision control system (see for example [http://subversion.tigris.org/subversion-linus.html this page] if you're not convinced). However, [http://svk.elixus.org/ svk] is built on top of subversion and is a decentralized revision control system.