Now blogging at diego's weblog. See you over there!

version control systems: a short review

Last week I spent some time looking at Source Control Management (SCM) systems (previous related entries here and here). Before my impressions, it's useful to state what I was looking for.

For one, I wanted to get a feel of how SCM had evolved in the last couple of years. I've been using CVS for the last 2 years or so, and before that I mostly used Visual Source Safe. I knew that both CVS and VSS had remained largely unchanged since then, but I had also heard about new systems that had recently appeared that made some things easier. Once of the things that was important to me was better branch management, and possibly looking for something that helped the process aside from helping manage the code base itself.

Anyway, so, the three main systems I looked at were subversion, Perforce and BitKeeper. There were others I found in the process of looking, but nothing major or too evolved.

Subversion looks promising, but it's just getting started. It's not easy to find plugins for many development tools, and there doesn't seem to be one available for IDEA, which is what I use (with the new machine I tried switching to Eclipse, but kept wasting time trying to find my way around it for refactoring features and other things, including keyboard shortcuts, so I gave up after about one hour. No time for that. Another thing: I use a local CVS repository. Eclipse only supports remote repositories! So I had to install a CVS server locally to even try it--ridiculous). Subversion does have a plugin for Eclipse though.

Perforce is a good improvement over CVS. Good client GUI tools. They use their own terminology for many things (for example, they have "submits" instead of commits), which can be confusing. The client is loaded with features, but that can be confusing as well. You can use Perforce for free for up to 2 developers, after that you enter a commercial license and it's $750 per developer, including support costs.

Both subversion and perforce are server-based, so as you scale you need to add hardware (and the time of the person that has to maintain both the server software and the server itself), so for many developers the cost will actually be more than it looks just from the license (Subversion is free and open-source, btw).

BitKeeper, however, is fully distributed, so there is no server cost that grows as the number of developers grows (you have a main repository facility for all the code, but it doesn't have to scale with the organization). The main repository in BitKeeper is used only as a main storage facility were the changes from the child (and even grandchild) repositories typically end up. Another cool feature of BitKeeper is staging. It allows you to stage the commit of a set of machines to one machine (a sort of "mock" main commit) and test from there. I can see this greatly helping when work from several teams has to be integrated into a single release, where you want to test all the commits before putting everything into the "real" main repository. As for cost, BitKeeper is free for one developer, then $1750 per developer, in the form of a one-year lease, so it's actually $1750 per year. Apparently you can purchase the license outright but this makes sense only after having a 5-year license on the seat. It sounds pretty expensive, but then again there's less cost in terms of server and management, so it is probably cheaper in the long run (at the very least, the cost should be similar).

In terms of ease of installation, Perforce wins by a mile, with Subversion coming second. The BitKeeper installlation process is just awful, requiring three different sets of installs in Windows (Cygwing, Tcl, and then BitKeeper), and in the end you end up with... a bash shell. There are Tcl-based GUI tools though. BitKeeper is very clearly a UNIX tool with a Windows version that feels more like a hack rather than a product.

All of these tools support something that to me is crucial (and that CVS doesn't have): atomic commits. When commiting multiple files, the whole set is commited or nothing is, so an error in one file will not mean that the version now in the repository is now broken.

So, conclusion?

Some interesting new tools, but you need a reason (like requiring atomic commits, for example). Most small to medium sized projects are probably okay with CVS, and maybe eventually subversion. Both Perforce and BitKeeper are more sophisticated systems, but prepare yourself for the learning curve (and get out your wallet).

Posted by diego on April 7 2003 at 9:36 AM

Copyright © Diego Doval 2002-2011.
Powered by
Movable Type 4.37