Modernizing version control for D365: A step-by-step guide to Git configuration & migration

June 19, 2025

As organizations modernize their DevOps practices, shifting from centralized version control systems like TFVC to distributed systems like Git has become a strategic priority, especially for teams working on Microsoft Dynamics 365 Finance & Operations (F&O). Git not only enables better collaboration and faster delivery cycles but also integrates seamlessly with Azure DevOps Git, making it the preferred choice for development teams.

In this blog, we’ll walk you through everything you need to know to start with Git for Dynamics 365 F&O projects. You’ll learn how to configure Git, use key commands in Visual Studio, adopt best practices for commits and pull requests, and execute a smooth migration from TFVC to Git. Whether optimizing your version control practices or planning a full migration, this guide offers actionable steps to help you modernize your DevOps approach confidently.

Why do we use Repos in DevOps for D365 F&O development?

In DevOps for Dynamics 365 Finance and Operations (F&O) development, repos (repositories) are used primarily for version control. This allows developers to track changes to their code over time, collaborate effectively with other team members, and manage different codebase versions. It also ensures smooth development and deployment processes by facilitating branching, merging, and code reviews, all within a centralized system like Git Azure DevOps.

Key benefits of using Repos in D365 F&O development

  • Collaboration

Multiple developers can work on the same codebase simultaneously, each making changes on their own branch and merging them into the main codebase to avoid conflicts.

  • Version control

Track every change made to the code, allowing you to revert to previous versions if needed easily.

  • Code review process

Enable team members to review each other’s code changes before merging them into the main branch, improving code quality.

  • Branching strategies

Create different branches for development, testing, and production environments. This allows for isolated testing and deployment of new features without affecting the live system.

  • Automated build and deployment

Integrate with CI/CD pipelines in Azure DevOps to automatically build, test, and deploy code changes to different environments based on commits to the repo.

  • Git as the preferred version control system

Most modern D365 F&O development teams use Git as the underlying version control system within their repos, due to its flexibility and popularity.

  • Branching strategy

Choosing a suitable branching strategy (like feature branching, trunk-based development) is crucial for efficient collaboration and managing different code versions.

Importance of Git

Git is a modern, distributed version control system that is critical in today’s software development practices. It allows developers to work independently with a complete copy of the codebase, enabling faster performance and offline access. Git simplifies collaboration by supporting efficient branching and merging, which helps teams develop features, fix bugs, and experiment safely without affecting the main codebase.

It also provides detailed history tracking, making it easy to audit changes and roll back if necessary. Widely integrated with DevOps tools and CI/CD pipelines, Git ensures smooth automation of build, test, and deployment processes. Its open-source nature and strong community support have made Git the industry standard for version control.

Use of Git fetch, pull, push, and sync for version control in Visual Studio

  • Fetch

It is important to fetch and pull before you push. Fetching checks for any remote commits you should incorporate into your local changes. If you see any, pull first to prevent any upstream merge conflicts. When you fetch a branch, the Git Changes window has an indicator under the branch drop-down, which displays the number of unpulled commits from the remote branch. This indicator also shows you the number of unpushed local commits.

  • Pull

Always pull before you push. When you pull first, you can prevent upstream merge conflicts.

  • Push

When you create commits, you have inherently saved local code snapshots. Use Push to push the commits to GitHub, where you can store them as backups or share your code with others.

  • Sync

You push commits if your local branch is behind the remote branch. If you try to push, a dialog prompts you to pull before pushing.

Use this operation to both pull and then push, sequentially.

Azure DevOps Git vs TFVC

Key PointsTFVCGit
ArchitectureCentralized Version Control System (CVCS)Distributed Version Control System (DVCS)
Repository StructureA single centralized repositoryEach developer has a full copy of the repository
Branching ModelHeavyweight, branching is less frequentLightweight, branching is fast and encouraged
Offline WorkLimited offline capabilitiesFull offline capabilities
PerformanceSlower due to network dependencyFaster due to local operations
MergingMore complex merging processMore flexible and efficient merging
Storage ModelTracks changes per fileTracks changes per commit (snapshot-based)
CollaborationDevelopers check in changes to a central serverDevelopers commit locally and push to a shared repository
Learning CurveEasier for beginnersFine-grained permission control at the file and folder level
Security & Access ControlFine-grained permission control at file and folder levelPermissions are typically repository-wide
Use CaseBest for large enterprises with strict controlIdeal for open-source and distributed teams

Comparable actions in TFVC and Git

TFVC    Git
Map Code ⟷ Clone 
Check In ⟷ Commit, Push 
Code Review ⟷ Pull Request 
New Branch ⟷ Fork 
Get Latest  ⟷ Pull 

Git review process

Git configuration

Let’s begin with the practical part of Git configuration and its usage. Setting up Git correctly is the first step to ensuring smooth collaboration, version control, and code management in your development workflow. In this section, we’ll walk through how to configure Git on your machine, set global settings like username and email, and understand how these configurations help manage your commits and contributions effectively.

  • Create a new repository.
  • Select Git as your repository type and select the check box “Add a README.”
  • After creating the repo, click the clone button to clone the repo locally.
  • Select Visual Studio from the IDE option.
  • Copy the clone URL of the repository.
  • Click on the clone repository option from Visual Studio.
  • Paste the clone URL in the repository location section and click on the clone button.
  • Cloning the repository from the server to your local machine.
  • Click on the Git repository button under the Team Explorer tab. Right-click on the main branch and click on New local branch.
  • Enter the name of the local branch and click “create.” Your local branch will then be created and shown under the branches section.
  • Create a new model.
  • Copy the newly created model.
  • Copy and paste the new model into the metadata folder of the local repos.
  • Open a command prompt and write a make link command to make the link.
  • The link of the model has now been created successfully in AOSService.
  • Create a new project.
  • To commit the newly created model and project to the local branch, click on the Git changes tab. Select the local branch, add the model and project files in the staged changes section, and commit the initial commit. The initial commit has been checked into the local branch.
  • To see the history of the local branch, select the local branch and view the history tab.
  • After committing an initial check-in, right-click on the local branch and then click on push. This action saves the commit as a local snapshot.
  • You can see the newly created local branch on Azure.
  • To create a pull request for the initial commit, right-click on the local branch and then click on “create pull request.” A pull request is used to merge the code from one branch to another branch.
  • Verify the artifacts that need to be added to a pull request, and after giving the pull request a name, click on the create button.
  • To view the pull request on Azure, select the pull request tab.
  • After verifying the elements, click on pull request and then the complete button to merge the initial commit from the local branch to the main branch or default branch.
  • This dialogue box will open after clicking on the complete button of the previous image. In this dialogue box, select merge as the merge type and select the “complete associated work items after merging” option. And click on the complete merge button.
  • Verify the results by viewing the main branch.

Work with Git

After the initial commit, the configuration part of Git has been completed. Now, see the commit for the very first task. Take a runnable class as an example.

  • Create a class and then go to the Git changes. In the staged changes section, take a class, and after giving the name of the commit, click on commit staged.
  • Right-click on the local branch and click on push.
  • Right-click on the server local branch, select create pull request, and then create the pull request.
  • After creating a pull request, click Complete the pull request.
  • Click on complete merge.
  • To verify the result, go to the main branch and find the elements of the recent pull request.

Migrate repositories from TFVC to Git

You can migrate code from an existing TFVC repository to a new Git repository within the same organization.

Why migrate from TFVC to Git?

Over the past several years, we added no new features to Team Foundation Version Control (TFVC). Git is the preferred version control system in the Azure DevOps Git Repository. Furthermore, all the improvements we made in the past few years regarding security, performance, and accessibility were only made to Git repositories. We have seen a continuous decline in the usage of TFVC over these years. A few customers still use TFVC, and we do not plan to remove this feature set for those customers. However, we plan to phase out TFVC in all new projects and organizations or projects that do not currently use it.

As a step in that direction, we will introduce a setting to “Disable creation of TFVC repositories.” It only changes the creation of new TFVC repositories; existing ones have no impact. The setting is available at the organization and project levels; the organization setting has a priority over the project level. By default, the toggle will be enabled. This means you can no longer create TFVC repositories in these new projects. But if you have a strong reason, you can have your administrator turn off the toggle. We will not allow you to turn off the toggle in the future.

Prerequisites of the migration

Before beginning the method of importing the repository, numerous prerequisites need to be met to facilitate migrations:

  • Only a single branch is migrated. When planning the migration, we should use a new branch strategy for Git.
  • Import only the latest version of the source control. You can optionally migrate some history, up to 180 days.
  • Your repository does not have binary assets like images and scientific data. These assets should use the Git LFS (large file support) extension, which the import tool does not configure.
  • The imported repository cannot exceed 1 GB in size.

Migrate repositories from TFVC to Git

The process to migrate from TFVC is simple:

  • Create a new repository where you’d like to store the code for migration.
  • Select Git as your repository type and unmark the “add a README” option for the migration.
  • Click on the Import button under the Import a repository
  • Select the type TFVC and give the repository path with the branch. ($/Repository/Branch). If you also want to migrate history, mark the migrate history check box ‘yes’ and enter the history up to 180 days.
  • The migration procedure will begin after you click the Import button.
  • The migration has been completed successfully.
  • It takes a while to finish, and then the outcome is shown. Click on the Contents button to view the items in that moved repository.
  • It takes a while to finish, and then the outcome is shown. Click on the History button to view the history of that repository.

Conclusion

Successfully transitioning from TFVC to Git within Microsoft Dynamics 365 F&O environments is a foundational step toward building a more agile and future-ready DevOps setup. By adopting Git, development teams gain better control over versioning, enable seamless collaboration, and accelerate delivery cycles through modern branching strategies and CI/CD integration.

At Confiz, we’ve helped organizations streamline their version control practices by aligning the right tools with proven methodologies. Our experience shows that careful planning, hands-on configuration, and team enablement are key to unlocking Git’s full potential in enterprise environments.

If you’re looking to modernize your DevOps workflows or need expert guidance with Git implementation, contact us at marketing@confiz.com.