A Story of TFS WTFery
Thursday, February 05 2009 39 Comments
I've had it with TFS. It's a thorn in my side. It sits there, embedded in Visual studio like ivy on a brick wall, mocking me. It's like developing in a hot tar pit. Sticky, smelly, and literally the biggest source of developer pain I feel these days. I finished up a set of bug fixes and application features that I needed to deploy to QA today.
One of them was updating a text file. Easy, right? Just double click the file! WRONG. If you do this you can't save it, you need to open Visual Studio & explicitly check-out the file. Then you can edit it. This is done because apparently the developers of TFS decided that Visual Studio is our only editor....
Don't lock my files, bro!
That is a minor gripe, but it's pretty substantial when you think about the fact that I have batch files, a NAnt build, configuration files, and a readme... all of which I'd like to use either Notepad2 or e-texteditor to edit.
If I want to edit a text file, Visual Studio is the last editor on the planet that I want to use.
Then I finish up some other boring SSRS work and commit it to our dev branch. Our CI build shows success, and I'm ready to merge to integration, which is where we deploy from. I kick off the deploy process and it fails. Apparently there was a missing file in the integration branch.
This file was a new file in a directory that was already branched, so when mergine shouldn't it get merged too? I guess not, because when I go to merge the folder, the new file is excluded. If you right click & try to merge just the file, it shows no branching targets. Ok, so let's branch it.
Branching in the same folder? Why on earth would you ever want to do that? That, my friends, is the path to madness. I correct the path to branch the file into the integration path.
So I finally do my build again, and get more errors. Reading the build output it looks like some changes still haven't made it over. I do another merge on this folder and...
then do a diff of the files:
WTFF!
So I guess now I'll need to merge each file, not the directory. Select the files and...
Doh! You can't branch multiple files via selection like this. Why? I'm sure there's a technical reason, but I don't flippin care. This is an abismal user-experience.
Ok, so I'll branch each one individually.... Merging individually didn't work either:
At this point I'm feeling a little bit like this guy:
(http://flickr.com/photos/dannyboyster)
So I went to the command-line to try a baseless merge. You can do that like this:
c:\project>tf merge /baseless <source> <target> /recursive
This seemed to do the trick. Time to commit the changes.
Now I'm greeted with a host of conflicts. I have never made code changes to my target branch. I have only merged to it. There should never be an incompatible change!
Now, here's what really gets me: I get different conflict resolution language depending on if I select a single file or multiple files.
Single file conflict resolution dialog:
Multiple file conflict resolution dialog:
So which is it TFS? Source/Target, or Local/Server? This is so confusing I'm not sure what to do in the latter. I guess I need discard server version, so I do that.
Two hours after completing my feature work, I'm finally able to check in the changes, do my deploy, and see it running successfully on the QA box.
What a day. TFS: I hate you.



Gabe
2.05.2009
6:05 PM
have you tried svnBridge? If you were really daring (and really sick of poor source control), you could even try adding git to the toolchain http://ayende.com/Blog/archive/2008/06/26/Git-to-CodePlex.aspx.
Haven't done it myself, but if I had to use TFS I'd be tempted :-)