|  |-bazaar
|  |-C/C++
|  |-TclTk
|  |-(X)Emacs
|  '-hardware

Powered by

DVC rules

Centralized VCS (version control systems) have ruled for a long time, but they have severe draw backs.

Distributed Version Control (DVC) fixes them!

Centralize version control is wrong due to:

Things done right in BZR (beside the problems above and basic operations): CVS has (kind of) branches, but it lacks proper merge support. It is essential that merges are tracked by the VCS, not the user or custom scripts. CVS has no support for renames. It is just too annoying to wait for CVS to complete simple commands like diff and status with a repository somewhere on the other side of the network. With BZR I push commits in background jobs and thus I am not bothered if it does not work or takes long. No need to wait for the commands I use most often: log, status, diff and commit.

SVN has cheap branching, but it is nothing worth without proper merge support. Well, it is worth a bit to tag a certain revision. It (1.4.*) lacks merge tracking and cannot handle merges for renamed files. If they would have done CVS right, they should have done this right first. There is a rename command, but it is just a fake, it is only an alias for copy+delete. The SVN developers are working on this, but SVN is still not distributed and thus sucks! In the meanwhile it is a PITA.

You do not like DVC? You think there has to be a central repository! Well, just name one branch the trunk, make it the central repository where only the few selected people may commit to. It will become more stable then it would have ever been with CVCS, as developers will push if things have been tested, but not when they feel the urge to commit.

You fear that people can just easily take away all the code and history. If you fear this, you should not give them access to the code or central repository at all.

Version control can be fun, just go for DVC. Commit often, branch and merge frequently. Disk space is cheap, keep as many branches as you want or use a local repository and light weighted branches / checkouts. Branch to your USB-stick hack somewhere else and merge back the changes. Host your repositories and branches on a dump server, i.e. some free web or ftp space. Merge revisions instead of patches, no need to write comments, credits etc. and no need for others to commit to your repository. Let others create the backups for you.

You call yourself an agile programmer, but you are still using a centralizes VCS ... you should switch to DVC or stop calling yourself agile.

If you do not like BZR then checkout HG, DARCS, MTN, GIT, ARCH, ... any DVC it better than a centralized VCS like CVS, SVN or any commercial ones.

Another word on DVC, in fact most of the time I use DVC inside Emacs instead of the command line as it is simply much nicer when reviewing changes, undoing debug stuff and selection files to commit. A nice command line is a must, but browsing history and changes is much easier outside of the command line in a GUI -- hey it is called browsing. While really has a nice GUI to browse history, I also want to have it on my desktop.
(c) Robert Widhopf-Fenk
Last modified: Tue Feb 12 23:11:24 CET 2008