Saturday, February 9, 2008

Distributed version control

(I'm still trying to figure out DVCS)

I love version control. I started with CVS and moved to Subversion. I loved having Pragmatic Version Control using Subversion when I was making the move. If you write software and you don't use version control, c'mon!

I don't know my way around distributed version control systems, though.

I became interested in distributed version control a few years ago when a good friend recommended darcs. I've played with it and other systems including Mercurial and Bazaar, and I've read a lot of blog posts and opinion pieces, but I've never actually wrapped my head around how to effectively use them in the contexts I'm used to. Maybe I'm just stuck in the wrong contexts.

If anyone's reading this and can help me, I'm all ears.

Linus's great tech talk on git made me feel I understand distributed version control a little better, but I still don't see the relevance. To make it clear, I'm not claiming my ignorance is a virtue. I guess I'm just slow on this.

I have been able to discern the following benefits:
  • No required master repository, all branches are equal
  • Trivial branching, easy merging (including cherry-picking)
  • Can work offline
  • Performance for local work isn't affected by the network
Am I missing anything important?

What I find interesting is that most of these issues are irrelevant for the corporate environments I'm used to, where everybody's working on a LAN, committing to a central trunk is fine (constant integration, and good unit tests prevent breakage), and the branching model is intentionally simple and reduces merging because in many cases merging will be hard regardless of the tools (think heavy refactoring).

More good links: