Discuss “the best” Source Control and you will get differing opinions and a good punch-up lively debate.
Considering the value of the source code to an organisation, it is something that should be taken seriously and the rather consultese answer regarding “the best” is “it depends”… anybody who has lost sleep over Visual SourceSafe corruption or ended up running nasty Analyze & Repair commands will tell you that VSS is BAD NEWS!!!
The following subjective comparison may help if you are evaluating Source Control options and have similar needs to our small 10-man dev team; we are a Microsoft Gold Partner and the team consists of predominantly Microsoft developers (Visual Studio, ASP.NET, SharePoint, MS-SQL etc.).
In our evaluation, the key requirements were:
- Good branching
- Good merging
- Good Windows integration
- Ability to work disconnected/remotely
- Good Visual Studio integration [actually this isn’t a big factor, more a nice-to-have]
- Easy to backup/restore
- Setup [easier wins, all other things being equal]
- Cost [although happy to shell out for licenses if there is value to be gained]
The options under consideration were:
The options we ruled out were:
- Visual SourceSafe [unstable & dangerous, branching support iffy]
- TFS2008 [would have incurred licensing $ cost; debating the value proposition is beyond the scope of this post]
Note that all the options were free for us in terms of licensing (as a Gold Partner we have licenses for TFS2010) however variable cost in terms of setup and on-going maintenance.
1. Subversion
Pros:
- Familiar to most of the team
- Low resource requirements
- Good tools & shell integration
Cons:
- Not distributed
2. TFS 2010
Pros:
- Full integration with VS2010
- Integration with work items & projects
- Flexibility
Cons:
- Flexibility [I know.. but in order to configure it “just right” it can be time-consuming!]
- Heavyweight back-end requirements [Two server setup recommended, backup/restore more costly & time-consuming]
3. Mercurial
Pros:
- Acceptable Visual Studio integration
- Good shell integration
- Good merging algorithms
- Good branching
- Distributed (fast as it is local!)
Cons:
- Learning curve [not too steep, but a change nonetheless]
4. Git
Pros:
- Distributed (fast as it is local!)
- Good branching
- Good merging algorithms
Cons:
- Visual Studio & Windows integration
- Learning curve [steeper than Mercurial due to less advanced tools/integration]
The clear winner on paper and in practice was Mercurial for us… it’s really fast, distributed across all developer workstations & laptops, with a central repository, allows quick and easy merging of branches and has good enough integration with Visual Studio and Windows. We also managed to preserve history migrating older projects from Visual SourceSafe, and developers working on laptops are able to disconnect anytime without thinking much about it.
I’m going to post more in-depth about Mercurial shortly, it really is “the best” for us.
Sadly Tumblr a bit lacking with regards to creating pretty images or even HTML tables to show green/red for each product vs requirement. That’s what you get for being lazy… technical debt!
Edit: I stand corrected on the integration of Git, thanks @andybritcliffe – Git extensions to the rescue: http://code.google.com/p/gitextensions/
I still prefer Python to Cygwin mainly because I had it installed already.. a tenuous subjective argument for which is “better”, but all other things being equal…
Leave a Reply