||[Tuesday 7th December 2010 at 6:55 pm]
|||||Breath of Life ~ Howard Shore/The Lord of the Rings - The Two Towers||]|
Today's annoyance is Mercurial. Mercurial is a distributed version control system which gives everyone their own copy of the repository. This sounds great, until you realise everyone needs their own copy of the entire repository.
I was working on a bugfix and wanted to grab some related code out of a repository, so I could pull it into a decent IDE rather than try and make sense of umpteen web browser tabs (a good IDE will let you follow references between files). Ok, since I only want a small part of it there's no need to grab the entire thing, right?
Unlike CVS or Subversion, it's all or nothing. You have to grab the entire repository even if you only want a single file. Even if you have no intention of making any changes.
Fine, tell TortoiseHg to clone the master repository, wait while it thinks about things... and then dies horribly applying changeset 51 of 800-odd. Because unlike CVS or Subversion, you really are copying the entire repository. Including the entire revision history. Which in this case turned out to be 150MB of files (presumably including several large binaries) and another 280MB of revision history!
On the one hand, files that large should probably not be blindly dumped in source control. But on the other hand, I wasn't even after any of those files! CVS, Subversion, or even Visual SourceSafe would have let me grab the latest version of just the files I wanted so that I could look through them and work out how this module fitted into where I was working on the bugfix.