In the last few days, I have played a little with Subversion. I admit that I’m somewhat of a sucker for configuration management / version control systems. Up to now, I’ve had the opportunity to work with CVS, VSS, StarTeam, and Perforce (I’m not even counting RCS). Out of these tools, the only one I really dislike is VSS, as it its file-based (rather than true client-server) approach severly limits its scalability. CVS, the de-facto standard for open source projects as well as many commercial ones, is certainly a solid tool, but it does have its shortcomings, such as the inability to version folders or to move or rename files. Its branching and merging is also somewhat awkward. StarTeam is my favorite tool in this regard, as its floating branches are extremely powerful in any project that requires maintenance of several major release branches. It also has some great bug tracking and task management features, which can be nicely integrated with the configuration management. Perforce is another very solid configuration management system. I have not had much exposure to its branching and merging features, but I believe that those are handled very similar to CVS. One of the things that sets it apart from similar tools is its support for changelists, which allow truly atomic checkins that are (for example) tied to a particular bugfix. Of course, both StarTeam and Perforce are commercial tools and therefore usually not an option for a startup. And as always there is some great stuff going on in the open source community.

Subversion attempts to replace CVS and directly addresses most of its shortcomings, while providing a similar command line interface. A few days ago I have replaced my personal CVS server with a Subversion server, and the process was pretty painless. One of the interesting things about Subversion is its ability to piggy-back on various servers for remote access. It provides a lightweight server of its own, but it can also be used in cojunction with Apache, by using the provided Subversion WebDAV module. There are also a fair amount of Subversion clients available and under development. I have found TortoiseSVN an excellent client for Windows systems. It contains both repository management as well as local Subversion sandbox management functionality. The Subclipse Eclipse plugin also appears to work flawlessly.

I have not used Subversion enough to comment on its branching and merging features or other advanced functionality, but I can say that it is just as easy to use as CVS with basic operations, and moving or renaming files or folders works as advertised. The underlying concepts are quite different, so make sure to read up on it in the excellent and free (!) O’Reilly Version control with Subversion book.

If you are starting a new project and planning to use CVS, you should strongly consider using Subversion instead. Of course, there are several other free version control tools out there, which you may want to investigate as well. For example, GNU Arch comes up every once in a while. Here’s a link to a list of free version control tools.