I’ve written about dancing, travelling, and trying to be a better person on this blog so far. But entries about writing code have so far gone unwritten. I’ll move towards changing that today with a quick discussion of the advantages/disadvantages of two of the most common styles of version control.
At my work I find myself dealing with two very different version control systems: Sourcegear’s Vault – created to replace Microsoft’s own Visual Source Safe system with a more fully-featured version control, and used for most of our development tracking; and SVN – a Unix-style source control system created to succeed the original CVS, which I use to branch and track my own changes on a day-to-day basis. Both systems support branching, but I have no experience with how Vault does it so I won’t be comparing them on that basis. However they both come with Diff/Merge tools, Visual Studio Integration and their own ways of storing versioning information – and it’s on these counts that I’ll weigh up their advantages and disadvantages.
Vault stores users and version information using an MSSqlServer database. Usually, this can just sit on the same server as the development environment. This can prove especially useful for integrating reporting into source code, and writing scripts to track and report on changes to files, committed bug fixes etc. are all possible. However, it does mitigate any security you might have, as anyone with EXECUTE access to the DB that stores your files can essentially change anything without logging it (or change the logs themselves). By contrast SVN stores versioning in the file system, throwing reporting out the window, but making the whole thing more secure in my eyes.
Score: SVN – 1 banana, Vault – 1 apricot
Both Vault and TortoiseSVN come with Diff-Merge tools (Sourcegear DiffMerge, and TortoiseDiff/TortoiseMerge that come with TortoiseSVN), and both do their job similarly. Personally, I find Sourcegear DiffMerge to feel like the tighter tool, TortoiseDiffMerge has too many bright colours out of the box, and confusion often follows suit (the files being merged are alternately referred to as Left-File/Right-File, Source File/Target File and Their File/My File However, TortoiseDiffMerge seems to deal better with ignoring tab/space changes.
SCORE: SVN – A confusing grapetiser, Vault – a filling mango
Because it was meant as a replacement for Visual Source Safe, Vault supports the checkout-edit-commit system for lock management. By contrast SVN uses an edit-merge-commit system. Personally, I much prefer the latter system – waiting for another programmer to release a lock on an object they may or may not have edited gets old quickly, and when combined with some of the issues with IDE integration can get positively infuriating. Luckily, Vault also supports an Edit-Merge-Commit mode, although I’ve never used it.
SCORE: SVN – a seedless cherry, Vault – a dirty strawberry
Both SVN and Vault can integrate with the Visual Studio IDE: Vault through their own plugin, SVN through the free extension VisualSVN. The Vault plugins are made as replacements to the Visual Source Safe system, and as such find themselves riddled with update and synchronisation issues. It’s a regular daily occurrence for me to check a file in or out from a different project or the Version Control GUI, only to have the IDE integrator tell me I can’t save changes because the file is in use by someone else……me! There’s also a very annoying ‘feature’ that checks out project files whenever a file underneath it changes – locking other devs out of adding or removing files from the project when they actually need to change it – which I have yet to find a way to turn off. VisualSVN suffers from a little lag-behind from the SVN server, but all-in-all suffers from none of the same issues .
SCORE: SVN – a ripe pomegranate, Vault – rotten peaches
In the end it all boils down to this: Vault is a commercial application, which is a pretty good replacement compared to Visual Source Safe. SVN is free, open-source and community-supported, and a pretty good replacement for CVS (or Vault). Personally, I’ll take the free basket of banana, cherry, pomegranate and grapetiser over $100+ per user for a tin of mangoes, apricots, rotten peaches and a dirty strawberry.