VCSes (Version Control Systems) are one of the core components of dev architecture. We use them every day and don’t care much about them - they just are (like the command line, web browser and IDE). And usually we don’t see much difference between them (they are just for keeping files versioned, aren’t they? no rocket science here). Some are clearly crappy (SourceSafe, SCM), but the typical ones are usable and represent quite similar level (I barely noticed the difference when moving from CVS to Subversion several years ago). That’s all true, until you start dealing with Distributed VCS and that’s what I’d like to elaborate today.
Why should I? Hasn’t whole world adapted them already? Yea, it has, but from my observations (do you agree?) Accenture seems very reluctant in that area (why?!).
What differentiates them from typical VCSes then?
- No single repository (so, no client-server approach)
- You can have separate repositories and perform merging / branching between those freely
- Lack of access to a central (due to agreement) repository doesn’t mean that you can work locally
- No network overhead on basic operations with repository
- Getting some else’s changes doesn’t mean that you have to merge them at once - you can work on any “leaf” you want
If you do a lot of coding, especially in extensively developed modules where change ranges of developers overlap each other - you will feel the benefit, trust me. After a year of working with Mercurial only, I feel awkward and somehow limited when forced to do something on Subversion.
However, I’d call myself dishonest with you if I didn’t mention one important thing - using DVCS requires a higher level of awareness and abstract thinking from your developers. If they didn’t grow up enough to use private branches and fork-merge pattern with SVN, they ARE NOT ready for Mercurial, Bazaar or Git!
For those who’d like to learn a bit more:
- Basic definition of DVCS - http://en.wikipedia.org/wiki/Distributed_revision_control
- Best (IMHO, for Windows platform) DVCS implementation - Mercurial - http://mercurial.selenic.com/
- Best Mercurial tutorial ever (well, one of the best tutorials regardless of technology, tbh) - http://hginit.com/
- Great Mercurial visual workbench - TortoiseHg (don’t compare it to TortoiseSVN as the latter is a piece of … junk) - http://tortoisehg.bitbucket.org