Quick Reference Guide to Free Software Decentralized Revision Control Systems version 5.1.0 2008-02-26
This is a quick summary of Free Software revision control systems, focusing on those which are suitable for decentralized development and which are under active development.
This page is only as comprehensive, accurate, and up-to-date as I can make it with limited expenditure of my time, and with the help of people who contribute corrections and updates. See Disclaimers, Other Resources, and Acknowledgements sections below.
| name and URL | status | platforms | decentralized | notes | last checked |
|---|---|---|---|---|---|
| Subversion | mature | unix, w32 | no | same idea as CVS | 2008-02-25 |
| Aegis | mature | unix | yes | continuous integration, enforced testing, auditing | 2008-02-25 |
| Vesta | mature | unix | no | filesystem interface; guaranteed repeatable builds | 2008-02-25 |
| monotone | mature | unix, w32 | yes | secure, decentralized, carefully engineered | 2008-02-25 |
| svk | mature | unix, w32 | yes | built on top of Subversion; written in Perl | 2008-02-25 |
| Mercurial | mature | unix, w32 | yes | good performance and portability | 2008-02-25 |
| bazaar-ng | mature | unix, w32 | yes | supported by Canonical/Ubuntu/Launchpad | 2008-02-25 |
| git | mature | unix | yes | used by Linux kernel hackers | 2008-02-25 |
| darcs | nearing maturity | unix, w32 | yes | uniquely flexible branching, merging, and cherry-picking | 2008-02-25 |
| Codeville | nearing maturity | unix, w32 | yes | sophisticated merge algorithm | 2008-02-25 |
status -- How mature is this project: "old", "mature", "nearing maturity", or "not yet mature".
decentralized -- Whether the tool facilitates code-sharing among developers who are independent and who are cooperating only loosely or even not at all. Note that although there are many different tools which are marked "yes" in this column, they differ widely from one another in the kinds of workflow that they support. Further explication would not fit in the margins of this web page.
platforms -- which platforms the tool works on; There are only two platforms: "unix" and "w32". A working, supported cygwin port counts for "w32" support.
notes -- whatever it occurred to me to write at the time that I was writing that field
last checked -- the date on which I last examined the project's web pages and mailing list archives and updated its entry in this file
John Goerzen has written a detailed and useful comparison of many tools. It is slightly out of date -- circa August 2006. He correctly predicted that GNU arch and bazaar v1 would soon be abandoned in favor of tools with better preservation of history across merges.
A web page I wrote explaining why darcs's merge algorithm is fundamentally more powerful and safer: because it uses more of the information that is available.
In addition to these resources, each tool has documentation on its web page.
I may have made errors of fact or inappropriate insertions of opinion -- caveat lector. Please send corrections to <zooko@zooko.com>. To compress descriptions of these complex tools into one small table necessarily loses information. For more complete information, you'll have to read each tool's documentation, or the more detailed comparison documents cited in the Other Resources section.
Note the "last checked" field, which tells you how long ago I looked at that project's home page and updated that project's entry in this file. Many of these are quickly evolving projects and the description in this file may be out of date. If you have a particular interest in any of these projects, please send me an e-mail and tell me about it -- have you compared it to others? Is it stable enough that you actually use it in your development process? Are developers currently working on improvements to it?
I have several personal or emotional attachments to these topics. I am far from a disinterested observer. Why would a disinterested observer go to all of the trouble to maintain this document, anyway?
My favorite decentralized revision control tool is darcs. It has some deep bugs still (which is why I don't mark it as "mature") but it is very easy to use, and very easy to manage branches in a way that I've never been able to do before.
I had some small part in the forming the original concept of Codeville in coffeeshop conversations with my friend and the original author of Codeville, Bram Cohen.
I am a personal acquaintance of Graydon Hoare, the founder of monotone. I respect his software engineering acumen.
I love the simplicity and efficiency of C, the programming language used to write SVN, and git. I appreciate the power and performance of C++, the programming language used to write Vesta and monotone. I admire the sophistication of Haskell, the programming language used to write darcs. I love the beauty and balance of Python, the language used to write Mercurial, Codeville and bazaar-ng.
Thanks to Glen Starrett , drl , Chia-liang Kao , David Phillips , Rob Weir , Tommi Virtanen, Walter Landry, Ross Cohen, Martijn van Beers, Thomas Arendsen Hein, Stefano Spinucci, and David "ddaa" Allouche for contributions of facts or of text for this document.