The D in DVCS
Just a reminder that the D in DVCS stands for “Distributed”, not “Disconnected” or “Decentralized”. This is a centralized model (from http://progit.org/book):
And this is Distributed:
Note that in the first picture, you’re reliant and dependent on the server for a lot of operations. Note that in the second picture, the only distinguishing feature of the Server is its label. It’s really just an agreement or convention on what the “central” server is. But we can draw all sorts of more interesting pictures, like:
Which is not hard to do at all with Git. The nice thing about the distributed model is that it opens doors to ways of working that simply aren’t possible or feasible with centralized VCS. You can try and work around it, but ultimately the centralized model of VCS is inferior.
It’s not just the “I can work on an airplane” factor (which is nice) or “I can branch and merge like it’s going out of style” effect (which is nice), but the architecture of a distributed model enables patterns and styles of work that can provide a real, measurable impact to a team’s productivity.
DVCS is not the opposite of CVCS, nor is it its complement. It is the next evolutionary step forward, one that no team I’ve encountered has ever chosen to go back on.