从公共项目迁移到GitHub

Azure DevOps Services

重要

Azure DevOps中的公共项目已停用。 从 2027 年开始,现有公共项目转换为专用项目。 有关详细信息,请参阅 公共项目退休 和 将公共项目迁移到 GitHub。

本文介绍如何将每个服务区域从Azure DevOps公共项目迁移到其GitHub等效项目。 它涵盖存储库、管道、维基、构件和工作项。

先决条件

Requirement 详细信息
Azure DevOps access 至少具有 基本 访问权限的项目成员
GitHub 帐户 有权创建存储库的 GitHub 帐户
Git 在本地安装的 Git
GitHub CLI (可选) 用于简化操作的 GitHub CLI

迁移存储库

GitHub存储库支持使用拉取请求、分叉和星号进行开放式协作。

使用 GitHub Enterprise Importer

GitHub Enterprise Importer是将存储库从 Azure DevOps Cloud 迁移到 GitHub Enterprise Cloud 的建议工具。 它迁移 Git 源(包括提交历史记录)、拉取请求、用户历史记录、拉取请求的工作项链接、附件和分支策略。

  1. 安装 GitHub CLI 迁移扩展:

    gh extension install github/gh-gei
    
  2. 使用Azure DevOps和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. 为Azure DevOps组织生成迁移脚本:

    gh gei generate-script --ado-org {organization} --github-org {github-org} --output migrate.sh
    
  4. 或者迁移单个存储库:

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

有关详细信息,请参阅 从 Azure DevOps 迁移到 GitHub。

使用 GitHub Importer

对于更简单的基于浏览器的选项,请使用内置GitHub导入程序:

  1. 登录到 GitHub 并选择 新存储库。
  2. 输入存储库名称,并将可见性设置为 “公共”。
  3. 选择页面顶部的 “导入存储库 ”。
  4. 输入您的 Azure DevOps 克隆 URL:https://dev.azure.com/{organization}/{project}/_git/{repo}。
  5. 如果出现提示,请输入Azure DevOps凭据。 使用 Microsoft Entra ID 登录。 如果需要使用个人访问令牌,请使用代码 > 读取范围创建一个个人访问令牌。 有关详细信息,请参阅使用个人访问令牌。
  6. 选择 “开始导入”。

GitHub导入程序迁移 Git 源和提交历史记录,但不会迁移拉取请求、工作项链接或分支策略。 有关详细信息,请参阅 使用 GitHub Importer 导入存储库。

从命令行导入

如果GitHub Enterprise Importer 不符合需求,请直接从本地克隆推送:

# 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

重要

在推送到公共GitHub存储库之前,请查看 Git 历史记录中的凭据、API 密钥或敏感数据。 使用 git 筛选器存储库 等工具从历史记录中删除敏感内容。

迁移管道

GitHub Actions为公共存储库提供灵活的工作流和免费运行时间。

使用 GitHub Actions 导入器

GitHub Actions导入程序自动将Azure Pipelines转换为GitHub Actions工作流。

  1. 安装 GitHub Actions 导入工具 CLI 扩展:

    gh extension install github/gh-actions-importer
    
  2. 运行审核以识别要迁移的管道:

    gh actions-importer audit azure-devops \
      --output-dir audit-results
    
  3. 转换特定管道:

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

有关详细信息,请参阅 使用 GitHub Actions Importer 将 Azure DevOps 迁移到 GitHub Actions。

Azure Pipelines与GitHub Actions之间的主要区别

Azure Pipelines GitHub Actions
azure-pipelines.yml .github/workflows/*.yml
阶段、作业、步骤 作业、步骤(阶段的可重用工作流)
服务连接 GitHub机密和 OIDC
代理池 运行器标签(ubuntu-latest, windows-latest)
任务引用(task@version) 操作引用 (owner/action@version)

迁移 Wiki 内容

使用 GitHub Wiki 或 GitHub Pages 发布指南和手册。

迁移到 GitHub Wiki

Azure DevOps Wiki 是 Git 存储库。 直接克隆并推送这些管道:

# 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

注释

在推送之前,请在GitHub存储库中创建至少一个 wiki 页面来初始化 wiki 存储库。 在GitHub存储库中选择Wiki选项卡并创建页面。

迁移到GitHub页面

对于文档密集型项目,GitHub Pages提供直接从存储库托管的完整静态站点。 可以使用 Jekyll 或 MkDocs 等静态站点生成器将 Wiki 内容转换为已发布的网站。

迁移工件

GitHub包支持发布和使用 NuGet、npm 和 Maven 包。

将软件包迁移到GitHub Packages

  1. 从您的 Azure Artifacts 源中下载现有软件包。
  2. 将包源重新配置为指向GitHub包。
  3. 将包发布到新源。

例如,若要迁移 npm 包,

# 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

备用注册表

对于需要广泛公开可见性的包,请考虑公共存储库:

包类型 公共注册表
NuGet nuget.org
npm npmjs.com
Maven Maven Central
Python PyPI
Cargo crates.io

迁移工作项

GitHub 问题和项目提供了用于管理缺陷(bug)和功能请求的现代化工具。

没有用于从Azure Boards到GitHub Issues迁移工作项的内置工具。 提供了多个社区选项:

  • Azure DevOps GitHub问题迁移器 — GitHub上的开源工具,可将工作项转换为问题、保留标题、说明和标签。
  • CSV export/import — 将工作项从 Azure Boards 导出为 CSV,然后使用 GitHub CLI 或 API 创建问题。
  • REST API 脚本 - 使用 Azure DevOps 工作项 REST API和 GitHub 问题 REST API生成自定义迁移脚本。

使用 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

确定迁移活动项和最近工作项的优先级。 已关闭项或历史项可能不需要迁移 - 可以在专用项目中将其设为可访问状态以供参考。

替换仪表板

GitHub没有与Azure DevOps仪表板等效的单个仪表板功能。 相反,类似的功能分布在多个本机功能中。

Azure DevOps仪表板使用 GitHub 等效
工作跟踪和燃尽图 具有内置数据分析图表的GitHub Projects
存储库活动 存储库见解 (提交、PR、流量、参与者)
构建和 CI 状态 GitHub Actions工作流运行历史记录和状态徽章
公共透明度 问题、拉请求、发布和自述文件徽章

对于跨多个存储库聚合数据的组织级仪表板,请浏览 GitHub Marketplace 上的集成。

迁移后核对清单

迁移内容后,请验证以下项:

  • [ ] 所有 Git 存储库及其完整历史记录均可在 GitHub 上获取。
  • [ ] CI/CD 工作流在 GitHub Actions 中成功运行。
  • [ ] Wiki 内容在 GitHub Wiki 或 GitHub Pages 中正确呈现。
  • [ ] 软件包从新的注册表中发布和恢复。
  • [ ] 在“GitHub 问题”中跟踪活动工作项。
  • [ ] 外部链接和徽章指向新的GitHub位置。
  • [ ] 协作者和社区成员将被告知新位置。
  • [ ] Azure DevOps项目中的自述文件将访问者定向到新的GitHub位置。