Rediger

Migrate from a public project to GitHub

Azure DevOps Services

Important

Public projects in Azure DevOps are retired. Starting in 2027, existing public projects convert to private. For more information, see Public projects retirement and Migrate from a public project to GitHub.

This article shows how to migrate each service area from an Azure DevOps public project to its GitHub equivalent. It covers repositories, pipelines, wikis, artifacts, and work items.

Prerequisites

Requirement Details
Azure DevOps access Member of the project with at least Basic access
GitHub account A GitHub account with permission to create repositories
Git Git installed locally
GitHub CLI (optional) GitHub CLI for streamlined operations

Migrate repositories

GitHub repositories support open collaboration with pull requests, forks, and stars.

Use GitHub Enterprise Importer

GitHub Enterprise Importer is the recommended tool for migrating repositories from Azure DevOps Cloud to GitHub Enterprise Cloud. It migrates Git source (including commit history), pull requests, user history, work item links on pull requests, attachments, and branch policies.

  1. Install the GitHub CLI migration extension:

    gh extension install github/gh-gei
    
  2. Authenticate with both Azure DevOps and GitHub:

    # Sign in to Azure DevOps with Microsoft Entra ID and set the token
    az login
    export ADO_PAT=$(az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv)
    
    # Authenticate with GitHub
    gh auth login
    
  3. Generate a migration script for an Azure DevOps organization:

    gh gei generate-script --ado-org {organization} --github-org {github-org} --output migrate.sh
    
  4. Or migrate a single repository:

    gh gei migrate-repo --ado-org {organization} --ado-team-project {project} \
      --ado-repo {repo} --github-org {github-org} --github-repo {new-repo}
    

For more information, see Understand migrations from Azure DevOps to GitHub.

Use GitHub Importer

For a simpler, browser-based option, use the built-in GitHub Importer:

  1. Sign in to GitHub and select New repository.
  2. Enter a repository name and set visibility to Public.
  3. Select Import a repository at the top of the page.
  4. Enter your Azure DevOps clone URL: https://dev.azure.com/{organization}/{project}/_git/{repo}.
  5. If prompted, enter your Azure DevOps credentials. Sign in by using Microsoft Entra ID. If you need to use a personal access token, create one with Code > Read scope. For more information, see Use personal access tokens.
  6. Select Begin import.

GitHub Importer migrates Git source and commit history but doesn't migrate pull requests, work item links, or branch policies. For more information, see Importing a repository with GitHub Importer.

Import from the command line

If GitHub Enterprise Importer doesn't meet your needs, push directly from a local clone:

# Clone the Azure DevOps repository with full history
git clone --bare https://dev.azure.com/{organization}/{project}/_git/{repo}
cd {repo}.git

# Push to the new GitHub repository
git push --mirror https://github.com/{owner}/{new-repo}.git

Important

Review your Git history for credentials, API keys, or sensitive data before pushing to a public GitHub repository. Use tools like git filter-repo to remove sensitive content from history.

Migrate pipelines

GitHub Actions offers flexible workflows and free runner minutes for public repositories.

Use GitHub Actions Importer

GitHub Actions Importer automates the conversion of Azure DevOps pipelines to GitHub Actions workflows.

  1. Install the GitHub Actions Importer CLI extension:

    gh extension install github/gh-actions-importer
    
  2. Run an audit to identify pipelines to migrate:

    gh actions-importer audit azure-devops \
      --output-dir audit-results
    
  3. Convert a specific pipeline:

    gh actions-importer migrate azure-devops pipeline \
      --target-url https://github.com/{owner}/{repo} \
      --pipeline-id {pipeline-id} \
      --output-dir migration-results
    

For more information, see Migrate from Azure DevOps to GitHub Actions with GitHub Actions Importer.

Key differences between Azure Pipelines and GitHub Actions

Azure Pipelines GitHub Actions
azure-pipelines.yml .github/workflows/*.yml
Stages, jobs, steps Jobs, steps (reusable workflows for stages)
Service connections GitHub secrets and OIDC
Agent pools Runner labels (ubuntu-latest, windows-latest)
Task references (task@version) Action references (owner/action@version)

Migrate wiki content

Use GitHub Wiki or GitHub Pages to publish guides and manuals.

Migrate to GitHub Wiki

Azure DevOps wikis are Git repositories. Clone and push them directly:

# Clone the Azure DevOps wiki repository
git clone https://dev.azure.com/{organization}/{project}/_git/{project}.wiki

cd {project}.wiki

# Add the GitHub wiki as a remote
git remote add github https://github.com/{owner}/{repo}.wiki.git

# Push to GitHub wiki
git push github main

Note

Before pushing, create at least one wiki page in your GitHub repository to initialize the wiki repository. Select the Wiki tab in your GitHub repo and create a page.

Migrate to GitHub Pages

For documentation-heavy projects, GitHub Pages provides a full static site hosted directly from your repository. You can use static site generators like Jekyll or MkDocs to convert your wiki content into a published site.

Migrate artifacts

GitHub Packages supports publishing and consuming NuGet, npm, and Maven packages.

Move packages to GitHub Packages

  1. Download existing packages from your Azure Artifacts feed.
  2. Reconfigure your package source to point to GitHub Packages.
  3. Publish packages to the new feed.

For example, to migrate an npm package:

# Set the GitHub Packages registry
npm config set @{owner}:registry https://npm.pkg.github.com

# Authenticate
npm login --registry=https://npm.pkg.github.com

# Publish
npm publish

Alternative registries

For packages that need broad public visibility, consider public registries:

Package type Public registry
NuGet nuget.org
npm npmjs.com
Maven Maven Central
Python PyPI
Cargo crates.io

Migrate work items

GitHub Issues and Projects provide modern tools for managing bugs and feature requests.

There's no built-in migration tool for work items from Azure Boards to GitHub Issues. Several community options are available:

  • Azure DevOps to GitHub Issues migrator — open-source tools on GitHub that convert work items to issues, preserving titles, descriptions, and labels.
  • CSV export/import — export work items from Azure Boards as CSV, then use the GitHub CLI or API to create issues.
  • REST API scripting — use the Azure DevOps Work Items REST API and GitHub Issues REST API to build a custom migration script.

Export work items with the Azure DevOps CLI

# Export work items from a query
az boards query --wiql "SELECT [System.Id], [System.Title], [System.State] FROM workitems WHERE [System.TeamProject] = '{project}'" --organization https://dev.azure.com/{organization} --output table

Tip

Prioritize migrating active and recent work items. Closed or historical items might not need migration—you can keep them accessible in the private project for reference.

Replace dashboards

GitHub doesn't have a single dashboard feature equivalent to Azure DevOps dashboards. Instead, similar functionality is spread across several native features.

Azure DevOps dashboard use GitHub equivalent
Work tracking and burndown GitHub Projects with built-in Insights charts
Repository activity Repository Insights (commits, PRs, traffic, contributors)
Build and CI status GitHub Actions workflow run history and status badges
Public transparency Issues, pull requests, releases, and README badges

For org-level dashboards that aggregate data across multiple repositories, explore integrations on the GitHub Marketplace.

Post-migration checklist

After migrating your content, verify the following items:

  • [ ] All Git repositories are available on GitHub with full history.
  • [ ] CI/CD workflows run successfully in GitHub Actions.
  • [ ] Wiki content renders correctly in GitHub Wiki or GitHub Pages.
  • [ ] Packages publish and restore from the new registry.
  • [ ] Active work items are tracked in GitHub Issues.
  • [ ] External links and badges point to the new GitHub locations.
  • [ ] Collaborators and community members are informed of the new location.
  • [ ] README in the Azure DevOps project directs visitors to the new GitHub location.