Not so long ago one of the projects I’m involved in was migrated from SVN to TFS.This project (tens of thousands of files, including binaries) lived and developed under SVN for many years. After working for a few months after the migration, some experience has appeared which I want to share.
It’s important to understand that this is a post-SVN person’s experience. I used TortoiseSVN (a plugin for Windows Explorer) and AnkhSvn – For Studio.
My impressions are under the cat
Version control system
TFS (version control system) is not really a version control system – it’s part of VS. After SVN, it’s a bit stressful. If I have 3 studios, it takes extra effort to figure out which TFS I have and works.
Used to that no project files are "read-only", so (if at least VS2012 stands) try to turn on "local mode". So keep in mind that although this mode doesn’t put "read-only", it works as it happens. Starting with a certain number of files/folders (50000) in workspace, this mode is not recommended (read-only). Details here
Apparently the number 50, 000 depends on the computer.
Studio VS2010 (or TFS2010?) has no "local mode" at all and that means all files on the disk will be "read-only" (welcome to the good old SourceSafe (VSS) world).
Windows Explorer Plugin
TFS has some kind of plagin, e.g, Microsoft Visual Studio Team Foundation Server 2012 Power Tools , but I’m aware of a few nuances. There are several versions of studio on the computer, and Power Tools is only one (I wonder which version?). Power Tools is not friendly with the studio: when I close the studio and start "Get Selected Item(s)" I get the error "TF400324: Team Foundation services are not available from server…". Power Tools can’t bring a new brunch from the server to the computer, you still have to run the studio to do it.
Mark the revision as if it were frozen.
A simple situation: we have version 1 in production and then they make version 2 for development. Bugs which are fixed in version 1 get merged into version 2. Quite often, some revisions do not need to be merged from version 1 to version 2. In SVN, this is done by selecting one check-box "Only record the merge". Then SVN shows those revisions as merged. I haven’t found such an option in TFS UI (Power Tools or VS), only the command line with all sorts of important parameters and revision numbers. Such a way automatically requires a special neat person. An interesting thing is that if you specify only one revision number, TFS will actually mark all revisions starting from that one.
Multi-revision merge (I don’t know how to say it in Russian).
If fixing a bug in revision 1 required several revisions (but not in a row, e.g. there are other revisions in between), then there is no way (even via the command line) to merge all those revisions into a single revision of revision 2. This also applies to rollback revisions and "mark as if frozen". I remember an urgent need to roll back two revisions (not in a row) just to check a certain feature (without any commits). couldn’t find a way!
I’m used to creating brunches for anything that will take some time or testing on a test machine. Since brunch is heavy, in terms of bringing it to the local disk, I created one brunch on disk and did Switch to the brunch I needed whenever. In my circumstances, this takes a max of a few minutes. TFS has no switch via UI. The command line has something similar, but at most it can be used in some persistent scripts, but not by humans.
Search/Filter by History
TortioseSVN has a simple and clear search (and filter) for the brunch history, which allows you to quickly find the revisions you want. You can build complex terms (revision author, number, comment, etc). Nothing like that is built into TFS. Tough to find. Very hard to look for :(.
In my circumstances, the transition proved to be painful : many things take significantly longer.
I admit that maybe TFS has some different ideology and some things are done differently (like shelve), but the general impression is that TFS is not yet up to SVN in capability.
If interested, you can add some more and it is interesting to discuss the transition to other parts of TFS (testing, building builds).