I’ve been on a new contract and we are using TFVC here. It’s a decent tool (used to be THE tool and was much better then SourceSafe before that) for version control (you’re doing version control, right??!!), but I’ve found myself saying “Git is so much better” out loud. I do really miss Git, but I need to be careful in presenting change (I don’t want to cause angst or feelings that things can’t be changed in the developers current company. I want to provide a view of what I and others at Omnitech have experienced as good and helpful to the development process).
The following are some reasons I’ve thought of, with help from my co-workers on MS Teams, on why a team might go through the disruption of changing version control, training, learning, questions and updating builds. Will it really help and increase our productivity and developer happiness over the long run?
I was a part of a different company that went through a TFVC to Git transitions a few years back. It took me a few months to get comfortable, so I’m aware of the learning curve. We definitely relied on our Git guru to fix our branch messes, but after a few weeks we all adapted well.
Some of this is in contrast to TFVC.
Overall, I feel more productive with Git (after the initial learning curve) and that I’m not fighting with it the way I do with TFVC. I feel that the pain to switch (and lost time) will be more then made up with by the PR improvements, culture improvement possibilities, easier to find experienced Git Devs and branching.
I’ve been working with others in a private Git Repo (since the company isn’t ready for Git, but this is a couple months of work, so I decided to live in Git as long as possible. In Azure DevOps, I have my own board, pull request and build. It’s very nice!). Now it’s time to move it into TFVC. The first time it took me about an hour to get the build started :-).
First, I tried StackOverflow. It didn’t work to compare and use a filter, because the Reconcile button is grayed out :-(.
Here’s the filter I used in the VS compare window:
Here's what worked
1. Copy the folder (exclude the .git folder, maybe delete all the bin dirs first)
1. Right click folder in Source Control Explorer and checkout
1. Keep this folder selected in Source Control Explorer and click the add items icon at the top.
1. Make sure the packages folder (NuGet) and other things you don't want (dlls, etc) do not get added.
1. Renamed and deleted files need to get removed manually :-(
1. Find each one in Source Control Explorer and right-click undo checkout then right-click delete.
1. Try to check in again

back to step 4 after you see this error.
When adding new projects that were in Git to TFVC, TVFC needs to add
```c#
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
to the .csproj for it to be bound.
Months after I wrote this, A co-worker pointed out changing the location to local from server.
“A caveat to the local workspace is that it can make some TFS operations take longer since it creates some extra local data on your machine to make it so it can catch changes to the local workspace. Also, shelvesets become more important because a local workspace won’t regularly sync your workspace to the server and save your changes with the server.” ~Ryan
I’ll try it out and add some more thoughts someday (if I remember :-)).
Donovan Brown does a great job presenting DevOps and happens to work at Microsoft. The Azure DevOps tools are really good and the team there has made the transitions themselves. In August 2018, Donovan tweeted.
This points out that you don’t have to move if you’re happy with TFVC and don’t want to make a change. However, there are many comments that point out the benefits of Git. One at the top from @t3rse (how I’ve had the pleasure working with and am proud to call a friend) said “I disagree. Being forced to think like a git improves engineering skill, not just for Microsoft but for literally anything. My guess is there are zero jobs that don’t require a deep understanding of git outside the halls of MSFT.”
Later on, Donovan responds to this and others “I would agree more with your statement if we did not offer both. But we do. You want Git fine. Not ready for Git fine. How is giving people choice a bad thing? You choose what is best for you.”
@TfsBuck is another good source for a Microsoft Azure DevOps engineer.
Donovan did an interview/conversation about Git in May 11, 2018 at Build.
Now that you’re convinced you want to use Git (you are convinced aren’t you?) and that it’s good for your team, how do you move towards it?
I got to help our company transition to Git! I’ve written up a more in-depth plan in 2020.
In my experience…
You need 1 or 2 people that are Git experts ready to help others when they make a mess of their branch. Identify that person(s). Do you need to dig in and learn before introducing to your team? The rest need to know how to do the basic steps either in Visual Studio or GitHub Client or in the command line (see my article Some Git Help for 5 easy command line steps to getting latest into your branches).
You can start using Git, while still using TFVC. It’s a great way to practice and to get used to creating small commmits. It also gives you a way to look through your personal history and revert/go back if you decide to undo in the future. It also gives you a back up in case you loose something with suspending and resuming (like I did last week). Visual Studio gets a little confused, but I’ve had good success using the Github client. Remember to still create some shelve-sets so you get a code backup on the TFS server and to make sure you have all the files marked as “add”.
All you have to do is go to the root directory in the command line and type git init
, git add .
, git commit -m "initial"
. You’ll probably want a .gitignore file first.
You need to be able to be the champion for change. This includes sharing stories (like mine and others), videos, articles and showing what you’ve learned. Have some lunch and learns, show off how to use git and a Pull Request in GitHub or Azure DevOps, start a book club (the Pro Git book is free!!). This may take some time.
Emphasize small local git commits and good Git practices. Talk about the way you want to do at your company.
Do you have a multiple branching code for change isolation? Talk about how to do that now in Git. Maybe this is even an opportunity to start the transition to Trunk Based Development, but don’t take on too much at once. The move to Git will be disruptive enough.
Now that people are aware of it, it’s time to see if you’re team is ready. Talk to your team and your manager about how to get the priority to introduce this change and possible interruptions.
I’m thinking about Azure DevOps pipelines as I write this.
More like TFVC RC branch merge https://t.co/wraMTLP6hC
— Kevin Logan (@alignedDev) March 15, 2019
What do you think?
Do you have an argument not to move from TFVC that I didn’t think of?
How’d your transition go?
The title feels like a high school cheer chant. It reminds me of marching band, “I’ve got spirit how about you?” that we’d yell to the other schools.
Minions cheering seems to fit…
Please consider using Brave and adding me to your BAT payment ledger. Then you won't have to see ads! (when I get to $100 in Google Ads for a payout, I pledge to turn off ads)
Also check out my Resources Page for referrals that would help me.