There is a lot of discussion going on if TFS Source Control is good or bad. In my experience it’s just a matter of getting used to it. Once you understand how TFS Source Control works, it’s a painless process.
For a client I had to summarize some differences between Subversion(their current source control system) and TFS.
Subversion | TFS Source Control |
Branching in Subversion has a constant cost | Branching in TFS has a variable cost based on the number of items in the subtree being branched. (content does not get branched, just the file metadata). |
Subversion doesn't force you to check out an item before you start editing it. | TFS needs to check out an item before you can start editing it. |
Subversion does not support undeleting deleted items(after a rename). | TFS supports easily undeleting deleted items. This includes being able to undelete something after a parent has been renamed. |
Subversion only shows an item history. It does not show non-history related branches of an item. | TFS can show you full branch topologies. |
Subversion doesn't have shelve support. | TFS includes shelves. |
Subversion has rich offline support. | TFS offline support is limited. |
Subversion has server side hook scripts | TFS has client-side checkin policies. |
Subversion doesn't have a real rename implementation. | TFS supports cyclic and dependant renames. (pending, shelving, merging, undoing, and checking in) |
Subversion supports symbolic links inside of the repository that don't create symbolic links on the file system, sync just downloads items from the destination instead. (See the documentation on svn:externals) | TFS has no sharing functionality. |
Subversion does not track the client status. | TFS has the concept of a workspace. It knows what version of the file the client has. |