More on VCS, branching, merging, etc.

Martin Fowler has posted a good discussion about the various flavors of processes to manage branching and merging.  There’s a lot of good information in there.  His conclusion is that cherry picking with the VCS is undesirable, that cherry picking should be done in software, and that continuous integration is the preferred process. It’s a good read (with pretty diagrams), although I don’t agree with his conclusion. In particular, he ignores the fact that some categories of changes can not be continuously integrated.  For example, systemic architecture changes are one category which often can not be continuously integrated.  Also, the examples provided by Martin entirely ignore parallel branches (in the feature-set sense, rather than the VCS sense) of the software, and/or long-lived support for releases.  Of course, these are exceptions, and nothing in Martin’s suggestion prevents the use of cherry picking to solve these cases.

Read More

Mercurial Rebase

I read Martin Fowler’s entry on using mqueues in Mercurial to squash a series of commits into a single commit, and while the post is informative, there’s an easier way: the Mercurial rebase command. The rebase extension has been included in Mercurial since 1.3, although it’s been available since sometime in the 1.2 release, and can perform a number of useful alterations of a repository. For Martin’s use case, his 5-step mqueue sequence is accomplished with two much more simple commands: hg tag “Pre-rebase” hg rebase -s –collapse The tag is necessary because the rebase command will not operate on descendants or ancestor, and will not automatically create a new tip to hold the rebase.

Read More

Why not to use Subversion

I’m a big Subversion fan, and have been since it was first released. Or, I was, until recently, when I discovered that Subversion is fundamentally broken. Some background: I’ve been using Subversion since 2000, when a project I was working on for the Forest Service chose to convert a CVS repository to it. Since then, I’ve been running a Subversion server that’s been hosting a number of open source projects I work on, as well as having provided hosting service for a couple of projects that I don’t work on.

Read More