Building notes, projects, and occasional rants

SCM systems again

I've been using darcs with some success on my personal projects for more than a year now.

The good thing about darcs is that it's very easy to start using, and some features, like the interactive record (commits for those using other SCMs), are extremely powerful.

I also had some problems with it, specially with large repos. It's getting a lot better but still, sometimes, with specific patches, it takes as long time to merge changes between repos.

In the last year, I've also started using Trac a lot, even with darcs, as I mentioned before. This is probably the best system I ever used to keep the code, wiki, bug tracking and project management all integrated, and I like so much that in the last months I've been pushing his use at work also. We now use it to manage two big projects with a Subversion repository, and it's been great. Several other projects there are also moving to Trac.

This push at work to use Trac + Subversion, and the problems with darcs that I have with two of my bigger repositories made me look around again, re-evaluating my choices.

I would love to keep the interactive record capabilities of darcs, but I also don't like using too many systems at once. Also Trac is starting to support other SCMs (Mercurial is in the trunk, a plugin for Trac to support darcs is also in the works in a separate repository, also written by Lele Gaifax), so I should be able to switch to another (well, at least Subversion or Mercurial) SCM without too much problems.

Mercurial is nice, but that would be yet another one to master, so I looked at Subversion as my SCM of choice for my projects. Unfortunately, it's a centralized design, and I want a distributed SCM for my pet projects because I do a lot of work offline and like to commit in small change-sets, and because having several remote mirror repositories is an excellent backup tool.

Enter svk.

svk its a decentralized version control system that uses the Subversion filesystem as its base, but then adds loads of other features that darcs already has. Also it allows you do mirror remote Subversion repositories (like the ones I have at Sapo), and work offline on them.

To start with svk, read the svk workflow explanation by Bieber Labs, It's probably the best one I've seen until now, and it will help you understand the rest. Then install svk, and read the output of svk help intro. The organization describes is much better than the ones you'll find in the wiki.

Then read through the wiki, the faq and other documentation (you still feel lost). There is also an excellent svk visual guide by Russell Brown.

After the intro, and a bit of browsing, I was able to mirror all the Subversion repositories I use on daily basis with no work at all.

There is also a nice tutorial on how to import darcs repos into svk, in case I need that.

The only think I'm missing is the incremental record feature of darcs, really. But good news: its on the roadmap for version 2.0.

As a bonus, for those old, very old repos still in CVS, apparently svk can also mirror them, although that feature seems broken for now. If I can make that work, even old CVS repos will be united under the same tool.

So I'm switching to svk for now. It might allow me to cut back on the number of systems I have to work on a daily basis to just one, if all goes well, but just using the same tool at work and on my projects will be a great time saver.

I'll keep you all posted on how this goes.

Technorati Tags: , , , , , ,