I can’t comment on TFS specifically, since my only experience with it was brief and very unpleasant, so I don’t want to.
However, I use git and github (enterprise version), and I have worked with various centralized VCS (rcs, cvs, svn, synergy) and decentralized VCSes (hg, git).
I think that the main difference between git and TFS besides some additional distinguishing feature is that TFS is based on a centralized system (e.g. rcs, cvs, svn and synergy) and that git is a decentralized system (dvcs), At first it can seem insignificant, but it has profound consequences.
- The dvcs repo clone contains the entire history, so you can continue to work, switch between branches, perform functions, etc. If the network does not work, the server does not respond, you are sitting on an airplane, etc.
- Since commits are local to your cloned repository, you have another degree of freedom (orthogonal to branches, etc.) where you can work on a function by creating a clone of the repository function, and if that doesn't work, just delete the repository. and it will never go down in the history of the upstream repository unless you clicked.
- DVCSes do not define a specific workflow. You can structure the interaction of your team in any way (multi-level, orthogonal, flat, centralized that you have). This is a great advantage that helps teams grow (and shrink) without being left with a system that cannot meet their design needs.
- GIT (and hg) supports things like patches / quilts that can be used for continuous integration. This is usually difficult to do in centralized VCS, so basically it just hasn't been done (I don't know if TFS has these features)
Florian Bösch
source share