Building notes, projects, and occasional rants

Evaluating source control systems

Which source control system do you use? In a open-source world the usual suspect is CVS. For some years now, CVS has been showing it’s age, so a bunch of replacements have appeared: Subversion, Arch, Darcs, to name just a few.

I still use CVS daily, with large projects, and I know it well. Well enough to get around most of the limitations it has. But I have decided to switch systems some time ago. The question is: which one?

Subversion has a lot of momentum right now. Perl is now maintained in Subversion, Mono switched today, and most of the Jabber stuff is also Subversion. The switch from CVS is simple, they have similar command line interfaces.

Arch is very well desingned but the learning curve is very steep. I tried a coupple of time already, and I always give up because I can remmember wich command I need. I’ll have to look into some of the arch frontends. It’s very different from CVS, but the offline capabilities are extremely good.

Darcs seems very good also, but I haven’t had time to test it. That’s my next step.

The three things I look in these systems are: * simple things should be simple: commit changes, push changes to remote repository, pull changes from remote repository, see differences between my copy and remote rep, see my changes since last commit, add, mode, delete files; * complex things should be possible: keep several branches of a project, merge branches. * They need to support offline operation: you must be able to commit, update, diff your work to a local repository and then sync when you get to the office.

There are also some nice-to-have things, like commit triggers. I use commit triggers to generate RSS feeds of commits.

While evaluating these systems, I developed a small test to see if it’s good enough for me: * create two branches of a project, called B1 and B2; * modify file X in B1; * in B2, rename file X to Y; * merge B1 into B2.

If after these simple steps, your Y file does not have the modifications made in B1, the source control system is flawed, and I just can’t use it. If you are serious about source control, this is just not acceptable.

The interesting part is that it seems Subversion fails this simple test. I think I’m doing something wrong, I’m trying to see what, but I can’t get Subversion to do the right thing. This would remove it from my list, and I would like to use Subversion (JabberStudio uses it a lot now).

I’m going to try Darcs now, re-check Subversion, but if those two fail, I’ll have to find a decent frontend to Arch.

Some references: * CVS * Subversion * Arch * Darcs * Version Control System Comparison * Thoughts on Version Control * Some notes about source control systems * JabberStudio