There are tons of questions and answers about Git versus TFVC Source Control, but no current answers given the integration of Git into Team Foundation Server/Service that I can find.
I'm starting green pasture development using a wide variety of languages (C#, C++, PHP, Javascript, MySSQL) using Visual Studio 2013. In the future, there will be some iOS development. I'm very familiar with SVN, VSS and TFS for source control. However, I have never used Git. I prefer TFS for process management/agile development... It's not perfect, but it integrates well into Visual Studio.
So, to help me decide between these two systems...
What are the big differences between TFS and Git for source control when using Visual Studio 2013?
- Is the only benefit in my case a local repository (not saying that it's insignificant) and iOS development support?
- Is the only drawback to Git the command line interface (some would argue that's not a drawback ;-P).
- Have you experienced in the Visual Studio 2013 GUI for Git? Is that enough to support basic branching/merging without the command line interface?
- Is there a detailed start-up guide for Git that shows Git being used with Visual Studio 2013? Microsoft has a video for integrating an existing Git repository into Visual Studio 2013, but I'm looking for a start from scratch with Git and VS 2013.
I am not looking for a book here, but just a few bullet points and maybe some relevant links from folks that have used both TFS and Git.
What are the big differences between TFS and Git for source control when using VS 2013?
MSDN has a very extensive page on all the features and differences between Team Foundation Version Control and Git.
Is the only benefit in my case a local repository (not saying that's insignificant) and IoS development support?
No, there's lot more, but they're often advanced scenario's of Git. Local Repo, offline support and full local fidelity on history is incredibly powerful, you get that out of the box with Visual Studio. There's a few other features that are great too! The ability to branch and merge from one repository to another is very powerful. I recommend you look up the Pro Git book for those. Git in TFS is just another git server, it has pretty much all features that the standard Git has.
The ability to rewrite history before merging allows you to remove or combine a number of smaller change sets, so that the history is cleaner and easier to read as a human.
Is the only drawback to Git the command line interface (some would argue that's not a drawback ;-P).
TFVC has a command line too, people just don't use it. For people that want to use Git and never do much more than TFVC does, they probably won't really need to leave the UI, they won't get a lot of the cool features though...
There might be a few other drawbacks, mostly due to the fact that it's different than what people are used to. It's not too hard to shoot yourself in the foot if you don't take the time to learn what git does when you do things. Things like Rebase and Squash are really powerful and create a very clean history, but it can leave people with the problem that they can't merge anymore if used incorrectly. TFS has the ability to put some security settings to take away the rights to make very stupid decisions on a git repository.
A very cool add-on for Git users on Windows is PoSHGit. it provides command autocompletion on the Powershell commandline.
Have you experienced in the VS 2013 GUI for Git? Is that enough to support basic branching/merging without the command line interface?
It has all you need for basic operations. But you do need to be able to visualize the different branches to know what's going on. Since the Git server and local repo are just Git, any git client can help you out here. SourceTree is an option here. The Git for Windows client is another.
For standard operations, check-in, check-out, merge, branch (or push, pull, fetch, commit, merge) the UI works just fine.
Is there a detailed start-up guide for Git that shows Git being used with VS 2013? MS has a video for integrating an existing Git repo into VS 2013, but I'm looking for a start from scratch with Git and VS 2013?
Starting with Git is available in a number of places... These are a few options:
- MSDN Docs: Use Visual Studio with Git
- MSDN Blog: Getting started with Git
- There's a Hands-on lab for the Brian Keller VM.
- Microsoft Virtual Academy: Using Git with Visual Studio 2013 Jump Start
- Pluralsight: Git for Visual Studio Developers
Other good reads:
- MSDN Docs: Git vs TFVC Summary
- Syncfusion: Git succinctly
- Setting the Visual Studio Merge tool as default for Git
- using PoshGit from within Visual Studio
- Apress: Pro Git
- ALM Ranger Git for TFVC users guidance.
And a few tools worth installing:
- PoshGit
- SourceTree
- Git Diff Margin
To clear up some confusing mixed terminology that is used a lot with TFS
Team Foundation Server (TFS) is an application life cycle management tool, which includes a source version control system (VCS) component.
The VCS component that TFS uses is primarily Team Foundation Version Control (TFVC)
So, the question would be TFVC vs Git
(In fact, TFS supports Git as a VCS option.)
So, the question is: TFVC vs Git
jessehouwing has a great answer that covers this in good detail, so please reference that
As far as choosing which to use, in my opinion Git wins in every scenario.
- It is lightweight: Simple to setup and start using.
- It's distributed nature means it is very resilient to disasters, someone will always have a copy of the repo.
- Offline work is simple, you are working with your own full repository. You can commit changes, revert, browse history, etc. You only need to be online when you wish to sync with a remote repository.
- Git command line options are very powerful but also intuitive. Makes scripting a breeze.
- In TFS there is no simple way to save the state of your changes (file additions, modifications, file deletions), and switch to another state of code. (For example, to work on two features and switch back and forth). In git, you simply checkout a different branch.
Is the only drawback to Git the command line interface (some would argue that's not a drawback ;-P).
If you're uncomfortable with the command line interface, there are multiple GUI frontends available for Git. Git itself actually contains repository browser GUI tool called gitk
and git-gui
- a GUI for git. Then there are third-party apps such as git-cola, TortoiseGit and others.