Sunday, 18 August 2013

SVN vs TFS vs Git

Despite the real world benefit like being able to review and rollback, I believe being able to grow and evolve with your code is one the reasons why version control is such an essential part in software development.

What have we got across the board?

In the beginning, there is Subversion. I've been using a couple of SVN tools to manage my code at work or for fun for years, which are TortoiseSVN, SmartSVN and VirtualSVN. (ref: How to Set Up a Source Control)

Subversion tools use tree structure to represent the trunk and branches of your code, which is easy to understand and use when committing, branching, tagging and etc.

But there are problems with svn tools too. In svn, it is exceptionally expensive to branch and merge. Branching always loads with a complete copy of the code base on server, and being able to branch locally does not exist. And you would never feel bored when merging more than a dozen files, or bugs fixes from previous release to current one, since tree conflicts and broken builds would be your best companions.

Later in my career, I move onto TFS. A magnificent tool and a successor of SourceSafe, which does almost everything for you, including version control, CI, test automation, project management, chat board, and at some point I almost believe Microsoft will integration Visual Studio into it. Therefore, I doubt it is a fair comparison, since what I want is a hiking pole, but I am getting is an iron man suit.

Like all Microsoft products, you get occasional crashes. And it does everything just about right, but slow, clunky and worst of all, pricey. Despite all the flaws, I am sure some loaded coops are still happy to live with it. In case you are curious, Team Foundation Service is a free cloud version for a five people team.

At some point in my career, Git just spreads like a wild fire, you hear people talking about it on every online community. Moreover, the cloud storage like GitHub does work on Git's favour to make it even more popular.

Git is fast, real fast, and it represents a complete different mind set in comparison to subversion, called DVCS. It uses graph, DAG to be specific, to represent the branches. It allows you to work on a local repository, which does not require you to be connected to your centralised all the time. Consequently the branching in Git is significantly convenient and cheap, as well as merging.

As every developer would have noticed, Git does lack a nice and visual GUI to assist illiteracy. Of course, I didn't mean it literally, but I am sure with a nice UI, Git would be more intuitive and appealing to non-tech heavy people. But apart from that, I honestly can't think of any thing else to complain.
So which tool should we use?

If you are loaded with money and a full on Microsoft house, TFS is your ultimate choice.

As for subversion tools and Git, there really is not such conclusion that one tool is definitely more superior than the other, since they all have their merits and they represent completely different version control approach. I will still list out the reasonings just for arguments' sake:

* Git has a steeper learning curve comparing to SVN.
* Git's workflow is generally faster comparing to SVN.
* Git branching is easier, faster and cheaper than SVN.
* Git lacks a good GUI comparing to SVN.
* Git allows history manipulation comparing to SVN.
* Git is more suitable for offline working, while SVN is designed to centralise code.

But as a hipster programmer, I'd say, use Git!