I have been using Team Foundation Server on the last couple of projects that I’ve worked on. Stuff I like:
- It is nicely integrated into Visual Studio and recognizes source file dependencies. Editing an .aspx file will automatically check out the associated .aspx.cs code-behind file for example.
- Renaming and moving files around within the Solution Explorer just works.
- Issue tracking is built into TFS so you can easily link a check-in to a particular defect or task. This is pretty sweet and sure beats adding stuff like “Fix for issue #13235” in the check-in comments.
The source control bugs the hell out of me though.
- Checking a file out does not automatically retrieve the latest version. I’ve lost count how many times I’ve made a bunch of changes and been all set to check in when I get an error saying that I don’t have the latest version which was checked in, oh, yesterday. Nothing like having to do an unnecessary and dangerous merge.
- It doesn’t work well if you are offline. You can manually uncheck the read-only box for a file that you want to edit in Windows Explorer and make your changes if you are disconnected from the TFS server. However, unless you explicitly check out the file later, any changes you made to the file will never be committed to TFS. This sort of thing worked much better with TortoiseSVN.
- Check-ins don’t seem to be atomic operations. God help you if you attempt to cancel in the middle of a commit. When I tried this, some of my local files were marked as read-only again but the changes were never actually committed to the server. Aaargh.