Converting From CVS to Subversion

For the past few weeks I've been investigating and planning a move from CVS (CVSNT actually) to Subversion at work. Hopefully this week I'll be able to do the actual conversion and see what mess it makes.

The main thing that's missing from Subversion is an exact equivalent for CVS's meta-modules. Subversion's externals are good but need to support relative URLs so that branching is simple. Even so, it's not that hard to go back and re-edit the externals property after branching and it can probably be automated with a small script.  It might actually be a good opportunity to automate adding new branches to our automatic build setup as well so whenever we create a new branch the build machine (affectionately known as Bob) automatically starts building it.

Overall though, it should be a major improvement.  Instead of using a dodgy port of UNIX software on a Windows server we'll have software that was specifically designed to be cross-platform and we'll be using the standard setup instead of some odd port that few people use.  CVSNT does it's job okay, but any time you find instructions for doing something with CVS, it assumes you're on UNIX which can make life really quite difficult since the CVSNT hasn't constrained themselves to just porting CVS, they're adding to it, changing things and generally breaking compatibility (for better or worse - usually worse in our experience).

The last few things I need to do is update our build process so that each build tags in subversion instead of CVS.  Test cruisecontrol with subversion and do some concurrent usage testing - the biggest problem we've been having with CVS is running into locked directories all the time and thus having to wait ages for operations to complete.

I'm also considering changing our build numbering scheme to use the subversion revision number instead of a separate incremental counter.  The problem I see with this is that subversion allows you to have files from different revisions checked out - while this is normally a good thing, it means that using the revision as a build number doesn't work.  For our automatic build machine, where all releasable builds should be done anyway, that's not a problem because it always builds from the latest source but for builds done manually it might not be as accurate as tagging.

One Response to “Converting From CVS to Subversion”

  1. Milo Says:

    We have been running subversion fine for ages here, but recently (inspired by one of your earlier posts actually), we decided to set up an RSS feed of the commit log via trac wiki. Since then we’ve had a to recover the db multiple times as we cannot for the life of us get Apache to play nice and keep subversion from getting ‘wedged’ (Problem with berklyDB backing, apparently wouldn’t happen if we used flat file backing). No serious damage, but damn annoying, especially if no one with access is around to fix it when you need repository access. Something you may want to be aware of.


Leave a Reply

Alternatively, subscribe to the Atom feed.