Fugeddaboudit. Real Nerds fight religious wars over source control systems. In my experience no subject is more likely to get a decent debate going amongst a group of developers than code reviews. And after that, source code control.
So I’m checking out (groan) Subversion.
In short, the source code control wars are soon to come to an end. Subversion is that good.
It doesn’t yet have the features and maturity of Clearcase, but unlike Clearcase it doesn’t bring your servers, clients or networks to their knees. Bear in mind that Clearcase is about the most powerful source code control system around. If you want to do serious large-scale development you would be (or have been) nuts to use anything other than Clearcase. As a qualified Clearcase administrator and daily user I invested lots of time and energy in Clearcase over the years, but as of right now I would recommend Subversion.
As for CVS? I would also prefer Subversion. Even for small one-person projects - where I once would have recommended CVS over Clearcase.
To test Subversion from both a user and administrator’s perspective, I’ve been using it to manage my config files and favourite libraries on my various machines. (Yes a source code control system is overkill for this task, but hey, ya gotta play with toys).
One of the killer features of Subversion IMHO is that you can set it up to use WebDAV as an access protocol. Basically this is an extension of HTTP and goes through any firewall. Setup is a bit tricky, because you need Apache 2.0 and some playing with permissions, but once you get it right, you can access your server from anywhere. My Subversion repository is set up on my home machine.
The correct reaction at this point is: “OMFG! You can browse the repository directly in your browser!”. OK so the CVSweb users may not be saying that, but the Clearcase users certainly are. In fact the CVSweb users are probably saying “is that all? just the latest revision?” To which the answer is most definitely no.
Check out the Subversion website for more of the features. Also check out the Windows GUI, TortoiseSVN which is great also.
So I’ve been using the Subversion repository to store my favourite emacs libraries. So when I check in a new version of, say, psvn, the Subversion interface for emacs, all I need to do is do an
svn update to have that update propogated to another one of my machines. So far the vendor branch feature of Subversion has been sufficient to maintain all of the third-party code in my repository, but checking in each new downloaded version of the libraries uses a bit of a kludgy perl script. Hopefully they’ll make this a bit more polished in future.
While Subversion does do efficient merging between branches (or in this case between sucessive versions of third-party libraries), it doesn’t store the fact that a merge occurred, and hence can’t calculate a common ancestor when you perform any subsequent merges between those branches. This is one area where Clearcase really shines, and I hope that Subversion gets this feature soon. In the meantime, tracking merges manually is not such a burden because Subversion increments a repository-wide revision number after every transaction. So instead of remembering that you last merged at 11:46am yesterday, all you need to track is that you merged into revision 132. I’m sure this revision number comes in handy for other things as well (build numbers, anyone?)
.bashrc and other files are synchronised in the same way as the third-party libraries as described above, but are a bit more tricky to maintain because they need to be made generic enough to run on all platforms. But that’s not Subversion’s fault!
OK, so enough nerd overload. Take-home message: Subversion is very good. Use it on your next project, you won’t regret it.