Distributed Source Control Systems

Kyle Cordes’ recent post about distributed source control reminded me that learning more about that topic has been on my Someday/Maybe list for awhile now. It’s Kyle’s opinion that distributed source control systems are “dramatically better” than centralized systems (like Subversion). I still haven’t decided whether distributed source control is a solution to a problem that I don’t have, but the bits about it making creating and merging branches easier appeal to me, so I decided to dig a little deeper.

All of the projects that I work on use Subversion as their source control system, so I needed to find something that would play nice with it. SVK seemed like an obvious choice since it’s layered on top of Subversion, and there’s a port for it in MacPorts, so that’s where I started. After I got the software installed, I worked through Ron Bieber’s excellent tutorial series to get a feel for the SVK workflow. I highly recommend these tutorials if you’re considering using SVK.

I’ve been experimenting with SVK for a couple of days now, primarily doing some development on the FXRuby 1.6 branch, and it was working like a charm. I have to admit that it’s a little slow, especially considering that it’s just looking at stuff on the local disk. But it seemed to be working. Unfortunately, I just discovered that SVK doesn’t support the svn:externals property. That is, if a directory in your Subversion repository has the svn:externals property set on it, SVK will not properly mirror those external directories (it just ignores them). This isn’t an issue for the FXRuby repository, but many of the other projects that I work on make at least some use of Subversion externals. For the time being, that means no SVK for me.

So, back to the drawing board. I know of several alternatives that I can look at, like git, Mercurial, Bazaar and arch. The main requirement for me is that it works on Mac OS X, and that it plays nice with Subversion (i.e. it can both pull down the latest changes from a Subversion repository and push my changes back to that repository). And, um, it has to support svn:externals. Any suggestions?

Update: Looks like people are also talking about Monotone and darcs. Meanwhile, at first glance it doesn’t sound like git supports svn:externals either. I’m getting a sinking feeling that none of ‘em will. Oh well, we’ll see.

Posted May 18th, 2007 in Software Development.

Comments are closed.