Skip to main content
Cloud DevOps Solutions
Get a quote Talk to an engineer

Azure DevOps

Planning an Azure DevOps to GitHub Migration

An Azure DevOps to GitHub migration touches repositories, pipelines, work tracking, permissions, integrations and developer habits. A plan sorts each into move, rebuild or retire, sets the order of waves, defines success criteria and rollback, and agrees who owns what before any data is moved.

Key takeaways

  • Repositories are the easy part; pipelines, boards and permissions carry most of the risk.
  • Decide what each component becomes in GitHub before moving anything.
  • Migrate in waves with a pilot team, and keep a clear point after which the old repository is read-only.
  • Integrations and service connections need rebuilding with new credentials, not copying.
  • Not every organisation should migrate, and a hybrid setup can be a legitimate end state.

Why plan before you move anything

Moving Git repositories from Azure DevOps to GitHub is mechanical and well supported. The surprises arrive afterwards: a build that no longer runs, a board nobody can find, a pull request rule that behaves differently, a deployment credential that was never documented. A migration plan exists to find those before your engineers do.

This page describes the planning work we do as part of our Azure DevOps consulting. The execution detail for the move itself is on our page about Azure DevOps to GitHub migration; here we focus on the decisions and sequencing that make it succeed.

What a good plan contains

  • A full inventory with active and unused items separated.
  • A target model for GitHub organisations, teams, repositories and rules.
  • A decision per component: move, rebuild or retire.
  • Waves, with a pilot, freeze windows and owners.
  • Exit criteria and a rollback route per wave.
  • A communication plan and short training material.

How it works in practice

Discovery

We start with what exists. For each Azure DevOps project: repositories and their last activity, branch policies, pipelines (YAML and classic), variable groups, service connections, Boards process templates, extensions, webhooks and service hooks, and the users and groups with their permissions. Archived or untouched repositories are flagged, since moving them is rarely worth the effort.

Deciding what each part becomes

Azure DevOpsTypical GitHub targetEffort
Git repositoriesGitHub repositoriesLow
Branch policiesBranch protection or rulesetsMedium
YAML pipelinesGitHub Actions workflowsMedium to high
Classic release pipelinesWorkflows with environmentsHigh
Variable groups, Key Vault linksSecrets, variables, OIDC to the cloudMedium
Service connectionsOIDC federation or scoped credentialsMedium
Azure BoardsGitHub Issues and Projects, or keep BoardsVaries
Azure ArtifactsGitHub Packages or keep ArtifactsMedium
PermissionsTeams and repository rolesMedium

Two rows deserve attention. Pipelines are not converted automatically in any way that produces a pipeline you would want to maintain, so we rebuild them around reusable workflows and treat the old YAML as a requirements document. Classic release pipelines carry approvals, gates and stage logic that must be expressed as environments and protection rules. Our page on deployment environments and approval gates shows the Azure DevOps side of what needs to be recreated.

Migrating repositories

GitHub provides a CLI extension and an importer service for moving repositories from Azure DevOps, including pull request history in supported cases. A typical dry run looks like this:

gh extension install github/gh-ado2gh
gh ado2gh migrate-repo \
  --ado-org my-ado-org --ado-team-project shop \
  --ado-repo web --github-org my-gh-org --github-repo web

Treat flags and capabilities as something to check against current documentation before the real run, since the tooling evolves. We always rehearse on a copy, compare branches and tags, and confirm that large files and submodules behaved.

Work tracking

If you use Azure Boards heavily, with custom process templates, area paths and queries, mapping to GitHub Issues is not one to one. The options are to keep Boards and link it to GitHub, to move to Issues and Projects, or to start fresh with only open items. We help you choose using your reporting needs. See Azure Boards configuration for what is being replaced or retained.

Identity and access

Authentication moves to GitHub accounts, ideally with single sign-on through your identity provider. Permissions are rebuilt using teams and repository roles rather than copied user by user. For cloud access, we replace stored secrets with OIDC federation, so workflows get short-lived credentials. This is a security improvement worth taking during the move.

Waves and cutover

A pilot team goes first, usually a team that is open to feedback and has moderate release risk. Each wave has a freeze window, a final sync, a switch of remotes and a read-only flag on the old repository. Developers need to update their local remotes, so we provide the exact commands.

Communication and the first week after cutover

Most support requests after a wave are predictable: “my local clone points at the old URL”, “where did my pipeline go” and “why can I not push to main”. We write the answers before the wave starts and post them where developers already look. A named person watches the first week, collects recurring questions and updates the guide. It is also worth agreeing in advance who can approve exceptions to branch protection during that week, so urgent fixes are not blocked while rules are still being tuned.

Decisions and trade-offs

Full move or hybrid? A hybrid keeps Boards or Artifacts in Azure DevOps and moves code and CI to GitHub. It reduces change but leaves two systems.

Rebuild pipelines now or after the move? Moving repositories first while pipelines still run in Azure Pipelines is possible and reduces risk, because Azure Pipelines can build GitHub repositories. The cost is a longer period of two systems.

Preserve history or start fresh? Git history is kept. Pipeline history and work item detail are costlier to preserve, so ask what an auditor or developer will actually need.

When not to migrate. If no one can say what problem GitHub solves for you, pause. Migration is a project with real cost, and it should be justified by consolidation, developer experience, security tooling or ecosystem needs.

Common failure modes

  • Underestimating pipelines. The code moves in a day and the builds take months.
  • Forgotten integrations. Webhooks and service hooks fire into nothing.
  • Permission drift. Everyone becomes admin to avoid friction.
  • Two sources of truth. Developers push to the old repository after cutover.
  • No communication. Teams find out on the day.

Delivery and handover

The plan you receive covers the inventory, target model, component mapping, wave schedule, risk register, rollback steps, communication drafts and a post-migration checklist. If you want us to run the migration as well, it is scoped from that plan. To start, book a consultation.

How to tell it is working

The pilot completes without unplanned work, each wave meets its exit criteria, builds are green on the new platform, old repositories are read-only on schedule, and developers stop asking where things went.

References

How we deliver it

  1. 01

    Discover and inventory

    We list repositories, pipelines, boards, extensions, service connections, users and integrations, and note which are active.

  2. 02

    Decide the target model

    Organisation and team structure, repository naming, branch protection, runners and work tracking approach are agreed.

  3. 03

    Map and size each component

    Each item is marked move, rebuild or retire, with effort and risk, so wave order and timeline are realistic.

  4. 04

    Plan pilot and waves

    A friendly team goes first, then groups of repositories, with freeze windows, communication and rollback defined.

  5. 05

    Define success and rollback

    We write exit criteria for each wave and a clear way back, so a problem does not become a prolonged outage.

  6. 06

    Prepare people

    Training notes, a short guide to the new workflow and a support route are ready before the first cutover.

Tools and technologies

GitHub Enterprise CloudGitHub ActionsGitHub CLIGitHub Enterprise ImporterAzure DevOpsAzure BoardsGitHub Issues and ProjectsTerraformOIDC federation

Frequently asked questions

What is the hardest part of migrating Azure DevOps to GitHub?
Usually pipelines and process, not code. Git history moves cleanly, but YAML pipelines must be rebuilt as workflows, boards must be mapped to issues and projects, and permissions need a new model. Teams also underestimate integrations and habits built around the old tool over several years.
Do we have to move Azure Boards too?
No. Many organisations keep Azure Boards for planning and connect it to GitHub repositories, at least initially. Moving work items is possible but rarely lossless, so decide whether history matters and whether GitHub Issues and Projects fit how you plan before committing.
Can we migrate gradually, one repository at a time?
Yes, and we recommend it. Migrating in waves lets a pilot team find problems early. The cost is a period of running both systems, so you need clear ownership, a rule for where each repository lives and a date when the old copy becomes read-only.
What happens to our pipeline history and artefacts?
Build logs, run history and artefacts generally do not move to GitHub Actions. Decide what must be kept for compliance, export it, and leave the old organisation read-only for a retention period. New runs start fresh in GitHub.
When should we not migrate to GitHub?
If your delivery process depends heavily on Azure Boards, deep Azure DevOps governance or classic release features, and nothing is driving the change, the migration may cost more than it returns. A hybrid with GitHub repositories and Azure Boards or Pipelines is often a reasonable alternative.

Talk to an engineer about azure devops to github migration plan

Book a free 30-minute call. We review your current setup and tell you honestly whether and how we can help.

Written by Saddique Khan, DevOps / SRE / Cloud Consultant Engineer. Last updated 2026-10-08.