For a project I did a while ago we were thinking about using a branch for each developer while working on large changes/additions. Why, you ask? Well I’ll try to explain, believe me I know there are alternatives but think about it before you judge.

Scenario
We want to deliver version 3.0 of our application but we also want to continue creating some new usecases. Since we use test driven development, we create a test, implement functionality and run the test. After this we want to check in the stuff and let the integration test run by our continuous build. One possible obvious solution could be to use a branche for the 3.0 release and continuo working on the head.
This all sounds clear, we use subversion as an scm (Source Control Management) system. I do have one problem though. The repository is on a server of a friend of mine, I need to use an scm which I cannot use everywhere due to firewall settings. Therefore I cannot checkin code, which makes I cannot separate the different features I implement.
Last week I listened to the javaposse podcast. There was an item about distributed scm. I got interested and desided to investigate further. I had a look at Mercurial and I am still curious. I copied the following piece of text from their wiki:
A distributed SCM tool is designed to support a model in which each Repository is loosely coupled to many others. Each Repository contains a complete set of metadata describing one or more projects. These repositories may be located almost anywhere. Individual developers only need access to their own repositories, not to a central one, in order to Commit changes.
Distributed SCMs provide mechanisms for propagating changes between repositories.

I installed the stuff (very easy, good manual, only 2.5 Mb or so download). There is a nice tutorial giving you the basics of using mercurial.

Next steps
I am not convinced I need a distributed scm. I like the idea of having a local repository. I think this can help you when working in a gridshore project. I want to have a better look at a good workflow for such a system. How are you going to configure your continuous integration? The first thing I did was looking for a mercurial maven scm plugin. There is a very current thread in jira about maven and mercurial. I want to start an experiment with this, so if you are reading this and you have experience or good articles please post a comment or send an email.

Centralized or distributed SCM