So... We've switched to TFS from SVN. I'd heard good things about it, and was looking forward to using it. Years ago I'd used TFS and I really didn't have much of an issue. I liked the shelf set feature. It made it very easy to put aside changes I'd made to work on a different task, great for urgent bug fixes.
The company I work for implemented a new policy. Gated commits. I'd done automated code reviews when using Hg and FogBugz, and that was wonderful, so I was looking forward to TFS' implementation. I couldn't have been more wrong.
With gated checkins, you create a shelf set. Then you create a "code review" task. A part of the code review task creation process is to manually link your shelf set to the task. This consists of pasting the string name of the shelf set into the text field "shelf set name". Seriously. If you forgot to copy the name when you created the shelf set, go back and open its details to get its name.
Then you assign it to the reviewer and wait.
Or, continue working.
If you continue working, you must shelve your new changes to pull back your old changes. None of this is actually enforced. You just can't commit unless you have an approved code review task. So, you shelve your new changes, unshelve the approved set, get latest, test the code, and commit.
Now you see lots of changes that aren't even changes. Right-click the files in your Pending Changes window, and many of them show that they're identical. TFS can't tell when a file is identical. Wastes time, since I like to review my changes from time to time. Make sure I didn't change anything I didn't mean to change.
Here's a worst case scenario.
Say, a dev is working on code. They need you to take over. So, you shelve the work you're working on, take their shelf set, apply it. Fix it, then try and merge your previous shelf set.
Yeah, you're pretty much screwed.
It won't let you.
You do what I did, and search Google and find
http://blogs.infosupport.com/the-how-and-why-behind-tf203015-lt-file-gt-has-an-incompatible-change-while-unshelving-a-shelve-set/
Yep. You need a special tool to merge shelfsets when your working copy has changes. Every other (decent) source control has ways of doing this. So, you need to get a VS power tool, and hit the VS command line to do it in TFS. Hot, huh...
Even still, it only brings over your "merges" to your working copy. Your shelfset will always and forever be unuseable.
Shoulda stuck with FogBugz...