My partner Matt pointed something out this evening that I had understood on a gut level for a while but never really articulated.
I still have the centralized version controlling mindset, from years of using subversion and (occasionally) cvs.
Really the only reason I switched to a dvcs from a cvcs is the luxury of making commits offline and pushing them when I have connectivity. And really the only reason I like making commits offline is that sometimes I have to literally pull out my network card to get any work done versus spend six hours reading reddit. Well, that and the fact that I like haskell, and darcs is the version controlling system of choice for haskell hacking — though there has been a marked shift lately to git. Time will tell on that.
But other than being able to work offline, my workflow hasn’t really changed. I check out from my centralized repository, which is on patch-tag. I make my changes, commit, and push.
This is sad, when I compare my workflow with, say, the development maelstrom that surrounds the linux kernel. Linus *really* take advantage of using a distributed version control — git, in this case. Linus has his twelve apostles, or whatever they are called, the trusted committers that he pulls from. The apostles have their guys that they trust, and so on out to the cubicle jockey in a data center in outer Mongolia that has only fixed one kernel bug in his life because it bit him in a weird way that affected only him. The fact that Mr. Mongolia’s patch still manages to filter in to Linus eventually through the nested circles of distributed trust is one of the wonders of our world, and a reason I am glad to be alive in this day and age.
But it is so not me.
It’s like that motivational poster that says that 99% of people only use 10% of their brain power. Exactly. I probably only use 2% of the awesome power of distributed versioning — the part that lets me work offline, to be precise.
I don’t branch promiscuously. There’s the production branch for patch-tag and the dev branch, and that’s it. And of all my projects, so far patch-tag is the only one I have felt the need to branch at all.
On the rare occasions when I have to merge my blood runs cold, even though darcs’s cherry picking features usually make merges quite easy compared to my experiences in cvs and svn land. Come to think of it, merging wasn’t even that bad when I was using a centralized vcs. I’m basically just a worry wart that is easily frightened.
It’s almost embarassing.
For a guy basing a business on providing better access for a cutting edge version controlling system (darcs) written in a cutting edge webramework (happstack) in a cutting edge language (haskell)… I guess I’m not really that cutting edge.