Dynamics 365 F&O TFVC to Git Migration Playbook: Beat the 2026 Deadline
The clock is ticking. Microsoft has confirmed that Lifecycle Services (LCS) will be deprecated in February 2026, and with it goes official support for Team Foundation Version Control (TFVC) as the source control backbone for Dynamics 365 Finance & Operations projects. If your team is still running X++ development through TFVC-backed pipelines in LCS, you are not looking at a minor upgrade — you are looking at broken build pipelines, unsupported ISV extensions, and blocked environment deployments the moment that deadline passes.
What makes this migration genuinely difficult is not awareness — by now, most IT Managers and F&O architects have heard the news. The hard part is knowing exactly how to execute the migration without disrupting active development cycles, losing code history, or introducing regressions in a complex X++ codebase. This playbook fills that gap. Whether you are planning the migration internally or evaluating a partner-led approach, here is the complete, actionable roadmap from TFVC to Azure DevOps Git.
Why the February 2026 Deadline Creates Genuine Urgency Right Now
Microsoft's deprecation of LCS is not a soft sunset. It is a hard cutoff with cascading consequences that compound the longer you wait. Here is what happens if you miss it:
- Broken Build Pipelines: LCS-hosted build VMs that rely on TFVC will no longer be supported, causing automated builds to fail with no official recovery path through the old toolchain.
- Unsupported ISV Extensions: Independent Software Vendor packages that were deployed and versioned through LCS asset libraries tied to TFVC branches will lose their deployment chain, effectively orphaning critical third-party functionality.
- Blocked Environment Deployments: Hotfixes, platform updates, and new feature deployments that flow through LCS pipelines will stall, meaning your production environment could become frozen in time while Microsoft continues to release updates.
- No Microsoft Support Escalation Path: Once a toolchain is deprecated, Microsoft Support will redirect any issues back to migration as a prerequisite — meaning live production incidents tied to the old pipeline become your problem alone to solve.
With enterprise migrations of this complexity typically requiring three to six months of runway depending on code volume, teams that have not started planning by Q3 2025 are entering genuinely risky territory. The urgency is real, and the path forward is Git on Azure DevOps.
Step 1 — Audit Your Existing TFVC Repository Before You Touch Anything
The single most common mistake teams make is starting the migration before they fully understand what they are migrating. A proper TFVC audit is non-negotiable. Here is what your audit should capture:
Branch Inventory and Mapping
Document every active TFVC branch: trunk, development branches, release branches, and any hotfix branches currently in flight. Map each one to its intended Git equivalent. In most F&O TFVC implementations, you will find a structure similar to this:
TFVC Structure (Legacy)
$/YourProject/Main → Git: main branch
$/YourProject/Dev → Git: develop branch
$/YourProject/Release/10.0 → Git: release/10.0 branch
$/YourProject/Hotfix → Git: hotfix/* branches
Recommended Git Branch Strategy (GitFlow)
main — production-ready code only
develop — integration branch for feature work
feature/* — individual developer or team branches
release/* — stabilisation branches per platform version
hotfix/* — emergency production fixes
Pay close attention to any label-based releases in TFVC, as these do not have a direct Git equivalent and must be converted to tags during migration.
Code Classification: Microsoft Base vs. Custom vs. ISV
Before migrating, classify every file in your TFVC repository into three buckets:
- Microsoft Base Layer Code: Standard F&O application objects that should not be in your repository at all post-migration. The unified developer experience pulls these from NuGet packages instead.
- Custom X++ Code: Your organisation's extensions, new models, and custom logic — this is the core of what you are migrating.
- ISV Code: Third-party packages that need individual conversations with each ISV about their Git-compatible deployment approach before migration day.
Carrying Microsoft base layer code into your Git repository is one of the most common post-migration problems. It inflates repository size, creates merge conflicts during platform updates, and signals that the migration was not done cleanly.
Step 2 — Executing the TFVC to Git Migration
Microsoft provides the git-tfs open-source tool as the primary mechanism for converting TFVC history to Git commits. This preserves your code history — which matters for audit trails and debugging — rather than doing a clean-cut migration that loses context.
Using git-tfs for History Preservation
# Install git-tfs via Chocolatey
choco install gittfs
# Clone your TFVC repository with full history
git tfs clone https://your-tfs-server/tfs/DefaultCollection $/YourProject/Main . --branches=all
# Clean up git-tfs metadata before pushing to Azure DevOps
git filter-branch --msg-filter 'sed "s/git-tfs-id:.*$//"' -- --all
# Add your new Azure DevOps remote
git remote add origin https://dev.azure.com/YourOrg/YourProject/_git/YourRepo
# Push all branches
git push origin --all
git push origin --tags
For large repositories with years of history, this process can take several hours. Run it in a staging environment first and validate that commit counts and file integrity match your expectations before touching production source control.
Handling ISV and Custom X++ Code Conflicts
ISV conflicts are where migrations most frequently stall. The recommended approach is to treat ISV packages as external dependencies managed through Azure DevOps Artifacts rather than code checked into your repository. Work through this checklist for each ISV in your environment:
- Contact the ISV to confirm they have a NuGet-compatible package available for your F&O version
- If no NuGet package exists, negotiate a timeline — many ISVs are themselves migrating and may have a package in private preview
- As a temporary measure, binary ISV deployable packages can be stored in Azure DevOps Artifacts and referenced in your pipeline without checking source into Git
- For ISVs that provide source code, create a dedicated model folder in your repository with clear naming conventions to isolate their code from your custom X++
Step 3 — Configuring Azure DevOps Pipelines for F&O Build Automation
This is where the real DevOps transformation happens. Post-migration, your build process shifts from LCS-hosted build VMs to self-hosted Azure DevOps agents using the unified developer experience. Microsoft's recommended architecture uses NuGet packages for the F&O platform and application binaries, eliminating the need to maintain a full D365 environment just for builds.
Unified Build Agent Configuration
# azure-pipelines.yml — F&O Unified Build Pipeline Example
trigger:
branches:
include:
- main
- develop
- release/*
pool:
name: 'FO-Build-Agents' # Your self-hosted agent pool
variables:
NuGetVersion: '10.0.x' # Target platform version
BuildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
displayName: 'Restore NuGet Packages'
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'select'
vstsFeed: 'YourOrg/FO-Platform-Packages'
- task: MSBuild@1
displayName: 'Build X++ Models'
inputs:
solution: '**/*.sln'
configuration: '$(BuildConfiguration)'
msbuildArguments: '/p:BuildTasksDirectory="$(Agent.ToolsDirectory)\\Microsoft.Dynamics.AX.Framework.Tools"'
- task: PublishBuildArtifacts@1
displayName: 'Publish Deployable Package'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'DeployablePackage'
Environment Promotion Gates
One of the biggest wins of moving to Azure DevOps is the ability to enforce proper environment promotion gates — something TFVC and LCS pipelines handled poorly. Configure your release pipeline with the following gate structure:
- Dev → Sandbox: Automated deployment triggered on successful build of the develop branch, with automated smoke test execution as a post-deployment gate
- Sandbox → UAT: Manual approval gate requiring sign-off from a functional lead, with a minimum soak period of 48 hours before promotion is permitted
- UAT → Production: Dual approval gate (IT Manager + Business Owner) with a mandatory change record attached, deployment window restricted to approved maintenance windows
These gates are configured directly in Azure DevOps Environments and enforce your ITIL or change management process automatically, reducing the human error that manual LCS deployments were prone to.
Decision Framework for IT Managers: Internal vs. Partner-Led Migration
Not every organisation has the internal DevOps capability to execute this migration safely. Here is an honest framework for deciding whether to run this internally or engage a partner like CRMONCE.
Choose Internal Execution If:
- Your team has at least one developer with hands-on Azure DevOps pipeline experience (YAML pipelines, not just classic)
- Your TFVC repository contains fewer than 50,000 changesets and fewer than 5 custom models
- You have zero active ISV integrations or your ISVs have already confirmed NuGet package availability
- Your development team can absorb a two to three week slowdown during the migration window without business impact
Choose Partner-Led Execution If:
- Your codebase spans multiple years of TFVC history with complex branching patterns
- You have two or more ISV solutions requiring coordination and testing
- Your internal team is primarily functional consultants with limited source control experience
- You need the migration completed within a tight window (under eight weeks) without disrupting an active project
Realistic Timeline Estimates by Code Volume
- Small (1-2 custom models, under 20,000 changesets): 3-4 weeks including pipeline setup and UAT validation
- Medium (3-5 custom models, 20,000-100,000 changesets, 1-3 ISVs): 6-10 weeks with parallel development freeze recommended
- Large (5+ models, 100,000+ changesets, multiple ISVs, active release cycle): 12-16 weeks with phased migration approach and dedicated migration sprint team
Rollback Planning
Every migration plan must include a defined rollback point. The safest approach is to maintain your TFVC repository in read-only mode for 60 days post-migration. Do not delete it immediately. If a critical defect is traced to a migration artefact, having the original TFVC history available for comparison is invaluable. Establish a clear rollback trigger criteria — for example, if more than three build failures occur within the first two weeks post-migration that cannot be resolved within 24 hours, the rollback protocol is activated.
Your Next Step: Don't Let February 2026 Become a Crisis
The Dynamics 365 F&O TFVC to Git migration is one of the most consequential technical decisions your team will make in 2025. Done well, it is a transformation that dramatically improves your DevOps maturity, enforces proper change management, and positions your F&O environment for Microsoft's forward-looking deployment strategy. Done poorly — or not done at all — it creates a crisis that lands in the lap of your IT Manager on a February morning in 2026 when deployments start failing.
At CRMONCE, we have delivered Dynamics 365 F&O implementations and DevOps transformations for organisations across India and globally. Our team of certified architects and developers can assess your current TFVC environment, design your Git migration strategy, and execute the full pipeline transition with zero disruption to your active development cycles.
Ready to start your migration assessment? Contact the CRMONCE team in Hyderabad today to schedule a free one-hour technical review of your current F&O DevOps setup and get a migration timeline tailored to your codebase.
Reference: Microsoft Lifecycle Services deprecation announcement and unified developer experience documentation — Microsoft Docs: Finance & Operations Developer Home Page