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 源(包括提交历史记录)、拉取请求、用户历史记录、拉取请求的工作项链接、附件和分支策略。
安装 GitHub CLI 迁移扩展:
gh extension install github/gh-gei使用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为Azure DevOps组织生成迁移脚本:
gh gei generate-script --ado-org {organization} --github-org {github-org} --output migrate.sh或者迁移单个存储库:
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导入程序:
- 登录到 GitHub 并选择 新存储库。
- 输入存储库名称,并将可见性设置为 “公共”。
- 选择页面顶部的 “导入存储库 ”。
- 输入您的 Azure DevOps 克隆 URL:
https://dev.azure.com/{organization}/{project}/_git/{repo}。 - 如果出现提示,请输入Azure DevOps凭据。 使用 Microsoft Entra ID 登录。 如果需要使用个人访问令牌,请使用代码 > 读取范围创建一个个人访问令牌。 有关详细信息,请参阅使用个人访问令牌。
- 选择 “开始导入”。
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工作流。
安装 GitHub Actions 导入工具 CLI 扩展:
gh extension install github/gh-actions-importer运行审核以识别要迁移的管道:
gh actions-importer audit azure-devops \ --output-dir audit-results转换特定管道:
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
- 从您的 Azure Artifacts 源中下载现有软件包。
- 将包源重新配置为指向GitHub包。
- 将包发布到新源。
例如,若要迁移 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位置。