Christoph's opinion on revision control systems for Debian packages
Subversion
- + Similar to CVS (for those used to CVS)
- + Works with WebDAV (access control, works through proxy, no shell access needed)
- + Tools (WebSVN, Tortoise, eSVN)
- + Widely used
- + svn-buildpackage (though a tad bit buggy)
- + you can check out parts/subpaths of repository
- - Merging is a bit chaotic (things can be merged or patched twice)
- - Everything is recorded in the history (there is no going back)
- - Special tags like $Revision$ are not expanded unless explicitly switched on
- - Global revision number for all files (either unchanged files get their revision number bumped up)
- - Branches are in the same repository while the common notion is that a branch is another copy of a repository
Darcs
Committing patches is done by:
- Sending your patches through email.
- Publishing your repository/directory tree through a web server.
- + Local repository
- + Allows to merge other people's changes one-by-one ("cherry picking")
- + darcs-buildpackage
- + Good for second-class maintainership. The co-maintainer can send in patches.
- + You can pull out or reverse arbitrary changes you made some time ago without touch any newer changes.
- + bash completions available
- + sophisticated merging (can even merge and revert older changes)
- - Cannot easily check in changes into a central repository (like WebDAV over a proxy)
- - Every participant needs to make his repository publicly visible so others can pull from it
- - not completely stable yet (in rare cases loops for a long time)
- - does not know about file permissions (executable flags get removed)
- - does not supports subdirectories - you need to check out everything
- - some operations mean changing files in the _darcs directory instead of using proper tools
- - misses some simple tools as in "svn status" to see which files are under repository control
- - is memory hungry (it loads the whole tree into RAM)
Git/Cogito
- + Looks simple
- + Branches are cheap
- + Can download through a proxy (can it upload?)
- - Git alone is very low-level. Cogito makes it a bit better but is badly documented.
- - no git-buildpackage
- - only available on Linux
- very little documentation (http://www.kernel.org/pub/software/scm/cogito/README)
- - not widely used as it seems
- - does not handle symlinks
Bazaar-NG (bzr)
Similar to Darcs. Just a bit more intuitive.
Committing patches is done by:
- Publishing your repository/directory tree through a web server.
- Uploading through FTP or SFTP.
- + Looks simple
- + Written in pure Python. Easy to install.
- - Cannot upload/commit through WebDAV. Supported: SFTP and FTP (or SCP and rsync when 'bzrtools' are installed)
Mercurial
I stumbled over this nifty RCS when reading http://bazaar-vcs.org/RcsComparisons. First impressions:
+ hg is easy to type
- + "hg status" works as expected (similar to "svn status")
- + bash completion
- - no easy sending of patches or comitting files to a remote location
Central versus distributed
- Central repositories can send out notifications automatically on changes
- One single official place where the current work is held
- Central backups
- In distributed repositories you never know who's in charge of *the* package to be uploaded (it may be useful if there is a main maintainer and a second-class maintainer)
- Checking out of distributed repositories means creating another branch (that can later be merged)
Using central repositories you should always update/checkout before you commit your changes.
In distributed repositories you get a branch once and then merge other people's changes as you like. There is hardly a need to update often.
