Friday, 04 January 2008

Genome has been developed with Team Foundation Server (TFS) for some time now, and it might be interesting to know in this context that TechTalk is a Visual Studio Inner Circle partner. TFS has proven to be a good source control system, but there are a few points that could do with a bit of improvement (particularly when compared to Subversion (SVN), with which I have extensive experience; that said, there are some features that both systems lack).


Modifying files in the “trunk” and then merging them into the “branch” is not possible if a file has been deleted in the “branch”: TFS will not allow you to merge the files. The whole changeset must be rolled back and redone in two phases, one for files that can be merged, one for those that cannot.


TFS does not support rollback. Instead, it simulates rollback by trying to apply a reverse diff to the files. One of the problems is that this is done on the client side, so it requires a clean copy of the entire repository, which may take a very long time depending on your connection. The other problem is that it is not really a rollback, but two consecutive changesets, which are displayed in the changeset list that is to be merged.

Offline support

Like TFS’s approach to rollbacks, its offline support is also simulated rather than real. It attempts to check all files that are on the local file system but not on the server, and vice versa, and then tries to check if files have been changed. Again, with a slow connection, this can take a very long time. Also, you have to manually select those files that have really been added from among hundreds (or even thousands) of files on the local machine. Features such SVN’s “ignore” feature, which lets you select files and/or directories to be skipped in source-control operations, would be handy. Another problem with TFS’s approach becomes apparent when the server goes offline and you want to change a file. The checkout operation will time out after about one minute, and even after the time out, Visual Studio will not go into offline mode; it will return an error instead. In order for it to recognise that it must work offline, the solution must be closed and reopened.


The notion of allowing tree-based branching and merging on direct parent-sibling relations only can be somewhat constraining. On the other hand, the branch/merge tracking is a nice feature that is lacking in SVN 1.4. it has been implemented in V1.5, but there is no stable version available yet). The “SVN switch” is another convenient feature that TSF unfortunately does not offer: it allows you to switch easily between branches.


SVN offers a nice feature called svn:externals which can be used in a manner like file sharing, but is implemented in a smarter way than VSS. The only downside is that it only works for directories.

Conflict handling

Conflict handling is slightly more practical in SVN: the conflicts do not all need to be taken care of at once. Instead, it marks the files as being in a conflicted state and creates local copies of any existing versions (base, yours, theirs) so that it is easier for you to verify changes. It is also easier to use 3-way diffs, which is also something lacking in the basic TFS tools.

I should also mention a general difference between the two systems, not in a technical sense, but in their philosophy: TFS – as a whole system – also tries to define a particular way that its users should work. Yes, it is customizable to some extent, but still enforces some constraints that cannot be worked around, whereas SVN is just a ‘simple’ source control system, and it is up to the user to decide how to use it, define useage conventions, pick tools to integrate with, etc.

Personally, I prefer dynamic typing – er ... I mean flexibility over rigid rules almost everywhere, but, as I learned the hard way and usually by my own fault, freedom can be very harmful if not used wisely. I can also agree that, in many enterprises, conventions can be somewhat difficult to enforce, so constraints placed by the tool, as with TFS, can be beneficial.

This is by no means an exhaustive comparison of the two tools, and not a fair one either, as I have not listed the disadvantages of SVN over TFS (no true rename, VS integration, and some more), but it does cover some aspects that have caught my attention and it can be seen as my top wish list of what I’d like to see in future releases.

Posted by Attila.

Friday, 04 January 2008 16:19:22 (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  |  Related posts:
Using VS2008 vs. TFS2005