Distributed version control 2009/03/16
First Wistow  and now Malcolm ! Wistow wrote a couple of weeks back about Git being awesome but encouraging the kind of patch hide-and-seek he had to endure when building NCSA httpd. In the comments we discussed whether the tools offered enough benefits to outweigh the inherent encouragement to fork your forks of your mother’s fork. I still maintain the tools offer significant benefits even in the face of Malcolm’s concern that rampant forking can splinter communities before they really form. Being a Django juggernaut, his word carries a lot of weight but I feel obligated to point out that the pile of forks that every open-source project must endure is not a new problem.
I bet every open-source program ever released has been tweaked by savvy users to do something extra, something different or something more correct. Distributed version control and sites like GitHub have brought the forks front-and-center, which I think is a much nicer place to keep them. Malcolm’s got a point — it shouldn’t be up to the user to decide which fork or set of forks is best; a successful project needs a release to serve as the official starting point. Merging patches or branches is a job for the fearless leader and one which should not be taken lightly.
Distributed version control gives the fearless leader a fighting chance to make sense of the parallel thought processes of any project’s multiple developers. An open-source project living in Subversion is stuck with patch files, emails and tickets; a project using Git gets branches, history, false starts and good ideas in as much or as little detail as the fearless leader needs to decide the fate of the patch.
Version control is a tool, not a form of government. It is the fearless leader’s responsibility to merge the best patches into the master copy, get second opinions and rewrites of iffy changes or flat-out reject feature creep and poor implementation.
There will always be both selfish users and philanthropic users.
In this awesome new world that has so many people coding in public
(thanks GitHub, Launchpad and Bitbucket!), it is actually becoming easier
to be philanthropic than selfish. It is easier to fork
$PROJECT on GitHub than to sequester changes behind your
Virtual Paranoid Network and GitHub keeps the fearless leader
informed. The loop is closed. We’ve emerged from patch
hell. We have the commit messages to prove it.