跳至主要内容

GitHub 产品之间迁移的概述

了解如何使用 GitHub Enterprise Importer 完成从一个 GitHub 产品迁移到另一个 GitHub 产品的整个过程,从规划到实施再到完成后续任务。

概述

使用 GitHub Enterprise Importer,你可以迁移到 GitHub Enterprise Cloud。有关详细信息,请参阅“关于 GitHub Enterprise Importer”。

如果你正在 GitHub 产品之间迁移,例如从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud,你可以使用本指南来规划和实施你的迁移并完成后续任务。有关受支持迁移路径的完整列表,请参阅“关于 GitHub Enterprise Importer”。

规划你的迁移

要规划你的迁移,请自问以下问题。

我们希望按组织还是按存储库迁移?

首先,如果你的迁移源和目标都是 GitHub.com,请决定你要按组织逐个迁移还是按存储库逐个迁移。

注意:如果你从 GitHub Enterprise Server 迁移,你只能迁移存储库。

如果你选择按存储库逐个迁移,则只迁移存储库级数据。如果你选择按组织逐个迁移策略,则还会迁移选定的组织级数据,包括团队及其对存储库的访问权限。

但是,当你迁移一个组织时,源组织拥有的所有存储库都会同时迁移。你无法将存储库分成批次或跳过迁移组织的任何存储库。如果你有大量存储库,或者你无法同时容忍所有存储库的停机时间,你可能需要运行存储库迁移。

此外,组织迁移会在目标企业帐户中创建一个新组织。如果你想将存储库迁移到现有组织,你需要运行存储库迁移。

最后,你必须是目标企业帐户的企业所有者才能迁移组织。如果你想让不是企业所有者的人员执行你的迁移,他们需要运行存储库迁移。

我们多久需要完成迁移?

确定你的时间表,它将在很大程度上决定你的方法。确定时间表的第一步是清点你需要迁移的内容。要收集此数据,请为 GitHub CLI 使用 gh-repo-stats 扩展。此开源工具会生成一份报告,详细说明要为一个组织迁移多少数据。

注意: gh-repo-stats 是一个第三方开源工具,不受 GitHub 支持。如果你需要此工具的帮助,请在其存储库中 打开一个问题

  • 存储库数量
  • 请求拉取的数量
  • 问题数量
  • 用户数量
  • 项目和 wiki 的使用情况

迁移时间主要取决于存储库中的请求拉取和问题数量。如果你想迁移 1,000 个存储库,并且每个存储库平均有 100 个请求拉取和问题,而只有 50 个用户对这些存储库做出了贡献,那么你的迁移很可能会非常快。如果你只想迁移 100 个存储库,但这些存储库平均每个有 75,000 个请求拉取和问题,并且有 5,000 个用户,那么迁移将需要更长的时间,并且需要更多的规划和测试。

使用分析器后,你可以根据你想要的时间表权衡你的库存数据。如果你的组织可以承受较高的变更程度,那么你可能能够一次迁移所有存储库,在几天内完成迁移工作。但是,你可能有多个团队无法同时迁移。在这种情况下,你可能希望批量分批迁移,以适应团队的时间表,延长迁移工作。

  1. 为 GitHub CLI 使用 gh-repo-stats 扩展,然后查看你的迁移清单。
  2. 要了解团队何时可以准备好迁移,请采访利益相关者。
  3. 完全查看本指南的其余部分,然后确定迁移时间表。

注意: gh-repo-stats 是一个第三方开源工具,不受 GitHub 支持。如果你需要此工具的帮助,请在其存储库中 打开一个问题

我们是否了解将要迁移的内容?

确保你和你的利益相关者了解 GitHub Enterprise Importer 可以迁移哪些数据。

  1. 查看为你的迁移源迁移的数据。更多信息,请参阅“关于 GitHub 产品之间的迁移”。
  2. 列出您需要手动迁移或重新创建的任何数据。

谁将运行迁移?

决定谁将运行您的迁移,并确保此人具有所需的访问权限。您的选项取决于您是按组织还是按存储库进行迁移。

决定谁将运行组织迁移

要迁移组织,您必须是源组织的组织所有者,或者组织所有者必须授予您该组织的迁移者角色。

此外,您还必须是目标企业帐户的企业所有者。您无法授予企业帐户的迁移者角色。

  1. 确认将运行您的迁移的人员是目标企业帐户的企业所有者。
  2. 如果该人员不是源组织的组织所有者,请授予他们该组织的迁移者角色。有关更多信息,请参阅“管理 GitHub 产品之间的迁移访问权限”。
  3. 确认该人员已正确配置个人访问令牌以满足所有访问要求。有关更多信息,请参阅“管理 GitHub 产品之间的迁移访问权限”。

决定谁将运行存储库迁移

要迁移存储库,您必须是源组织和目标组织的组织所有者,或者组织所有者必须授予您不是所有者的每个组织的迁移者角色。

  1. 决定您是否希望组织所有者执行您的迁移,或者您是否需要授予其他人迁移者角色。

  2. 如果您选择授予迁移角色,请决定将角色授予哪个人或团队。

  3. 将迁移角色授予该个人或团队。有关详细信息,请参阅“管理 GitHub 产品之间的迁移访问权限”。

    注意:请记住,同时为源组织和目标组织授予迁移角色。

  4. 确认该人员已正确配置个人访问令牌以满足所有访问要求。有关更多信息,请参阅“管理 GitHub 产品之间的迁移访问权限”。

我们是否希望在迁移后保持类似的组织结构?

接下来,考虑您是否希望在迁移后保持类似的组织结构。如果您想将迁移工作分解为批次,这将帮助您确定批次。如果您打算在源组织和目标组织之间保持一对一对应关系,那么我们建议按组织对迁移进行批处理。这是最简单的方法,特别是如果您从 GitHub.com 迁移,因为您可以使用一个命令迁移整个组织。如果您从其他来源迁移,GitHub CLI 可以生成一个脚本,以迁移单个组织中的所有存储库。

如果您打算更改组织结构,请考虑其他批处理因素。您可以对由类似团队或业务部门拥有的存储库进行批处理,也可以按目标组织进行批处理。如果可能,我们建议按团队进行批处理。如果您按业务部门或目标组织进行批处理,您将增加涉及的利益相关者的数量,这可能会导致迁移时间窗口缩短。

即使您更改了组织结构,您仍然可以为迁移准备脚本。使用 GitHub CLI 命令,然后根据需要将每个存储库的行移动到不同的脚本中。

注意:您可以同时运行多个批次。例如,如果您按团队进行批处理,则可以在同一时间窗口内运行多个团队的迁移。

  1. 决定您的新组织结构。
  2. 决定是否需要将迁移工作分解为较小的批次。
  3. 如果是,请决定如何分解迁移。

运行迁移

完成规划后,即可开始实际迁移。为了帮助发现迁移期间和迁移后企业可能遇到的独特问题,我们强烈建议对所有迁移执行试运行。解决试运行中发现的任何问题后,即可运行生产迁移。

试运行迁移可帮助您确定几项关键信息。

  • 给定存储库的迁移是否可以成功完成
  • 您是否可以将存储库恢复到用户可以成功开始工作的状态
  • 迁移运行需要多长时间,这对于规划迁移计划和设定利益相关者期望非常有用

试运行不需要大量时间协调。GitHub Enterprise Importer 绝不会要求正在迁移的存储库的用户停机。但是,我们建议在生产迁移期间停止工作,以确保在迁移期间不会创建新数据,否则新数据将缺失于已迁移的存储库中。这对于试运行迁移来说不是问题,因此试运行可以在任何时间进行。为了减少完成试运行迁移所需的时间,您可以将试运行的批次安排为背靠背。然后,这些存储库的用户可以在自己的时间验证结果。

对于存储库迁移,我们建议创建一个测试组织,用作试运行迁移的目标。您可以为所有试运行使用一个组织,或者为每个目标组织创建一个测试组织。考虑在组织名称末尾添加 -sandbox,以明确说明这些组织仅用于迁移验证,而不是用于生产。完成后,您可以删除测试组织。

  1. 如果您正在运行存储库迁移,请为您的试运行迁移创建一个测试组织。
  2. 如果您的源组织使用 IP 允许列表,请将该列表配置为允许 GitHub Enterprise Importer 访问。有关详细信息,请参阅“管理 GitHub 产品之间的迁移访问”。
  3. 运行试运行迁移。
  4. 为试运行迁移完成以下描述的后续任务。
  5. 要求用户验证迁移结果。
  6. 解决试运行迁移中发现的任何问题。
  7. 如果您的目标使用 IP 允许列表,请将该列表配置为允许 GitHub Enterprise Importer 访问。有关详细信息,请参阅“管理 GitHub 产品之间的迁移访问”。
  8. 如果您正在运行存储库迁移并且想要迁移 GitHub 高级安全设置,请为目标组织启用 GitHub 高级安全。有关详细信息,请参阅“管理组织的安全和分析设置”。
  9. 运行生产迁移。更多信息,请参阅“关于 GitHub Enterprise Importer”或“将组织从 GitHub.com 迁移到 GitHub Enterprise Cloud”。
  10. 选择性地删除测试组织。

完成后续任务

每个迁移完成后,在存储库可以开始工作之前,您需要完成一些其他任务。

检查迁移状态

首先,检查您的迁移是否成功或失败。

检查迁移状态的方式取决于您运行迁移的方式。

  • 如果您使用 GitHub CLI 运行迁移,默认情况下,该进程将在迁移完成后显示迁移是否成功或失败。如果迁移失败,您将看到失败原因。

    Migration completed (ID: RM_123)! State: SUCCEEDED
    
  • 如果您使用 GitHub CLI 和可选的 --queue-only 参数运行迁移,该进程将在排队迁移后立即退出,并且不会告诉您迁移是否成功或失败。您可以使用 wait-for-migration 命令或查看迁移日志来检查迁移状态。

  • 如果您使用 GraphQL API 运行迁移,则可以查询 RepositoryMigration 对象上的 statefailureReason 字段。

如果迁移失败,迁移日志可能包含有关失败原因的其他信息。更多信息,请参阅“查看迁移日志”。

查看迁移日志

查看每个已迁移存储库的迁移日志。更多信息,请参阅“访问 GitHub Enterprise Importer 的迁移日志”。

如果迁移失败,日志可能包含有关失败原因的其他信息。

如果迁移成功,迁移日志中可能会有警告,表示未迁移或迁移时有保留的特定数据(例如拉取请求、问题或评论)。

有关了解迁移警告的更多信息,请参阅“使用 GitHub Enterprise Importer 排查迁移问题”。在查看所有迁移警告后,你需要决定是否可以接受这些警告并继续。

迁移 Git LFS 对象

GitHub Enterprise Importer 不会迁移 Git LFS 对象。如果源代码仓库使用 Git LFS,你可以手动将 Git LFS 对象推送到迁移后的代码仓库。有关更多信息,请参阅“复制代码仓库”。

设置代码仓库可见性

所有代码仓库都作为私有代码仓库迁移,只有运行迁移的用户和组织所有者才能访问该代码仓库。如果你不希望代码仓库为私有,请更改可见性。

  • 你可以在浏览器中更改代码仓库的可见性。有关更多信息,请参阅“设置代码仓库可见性”。
  • 或者,你可以使用 GitHub CLI 从命令行更改代码仓库可见性。你甚至可以将此命令添加到用于运行迁移的脚本中。有关更多信息,请参阅 GitHub CLI 文档中的 gh repo edit

配置 GitHub Actions

如果你在代码仓库中使用 GitHub Actions,你的工作流将作为 Git 代码仓库的一部分自动迁移。

在迁移过程中,GitHub Actions 会为所有迁移的代码仓库禁用,以避免工作流被意外触发,但在迁移完成后,GitHub Actions 会重新启用。

如果你使用较大的运行程序、自托管运行程序或加密密钥,则必须重新配置它们。

注意:GitHub Actions 的工作流运行历史记录不包含在迁移中。

  1. 如果你使用自托管运行程序,请重新配置你的运行程序。

  2. 如果您使用较大的运行程序,请重新配置您的运行程序。

  3. 重新添加任何加密密钥。

  4. 重新配置环境。有关详细信息,请参阅“使用环境进行部署”。

配置 IP 允许列表

如果您已将 GitHub Enterprise Importer 的 IP 范围添加到源组织或目标组织的 IP 允许列表,则可以删除那些条目。如果您已禁用目标企业中身份提供商的 IP 允许列表限制,则现在可以重新启用它们。

有关详细信息,请参阅“管理 GitHub 产品之间的迁移访问”。

管理 GitHub 高级安全

如果您在迁移代码库之前为目标组织启用了 GitHub 高级安全,则会迁移各个功能的设置。如果没有,您需要在迁移后重新启用各个功能。有关详细信息,请参阅“管理代码库的安全和分析设置”。

每个功能都有额外的迁移后步骤。

机密扫描

为目标存储库启用机密扫描后,将执行整个存储库的扫描。扫描完成后,所有警报都将填充,但没有修复状态。

你可以使用 REST API 更新警报,以反映源存储库中的任何修复。有关更多信息,请参阅“机密扫描的 REST API 端点”。

与这些更新修复关联的用户将是用于 API 调用的个人访问令牌的所有者,而不是在源存储库中修复警报的用户,并且与修复关联的日期将是 API 调用的日期,而不是在源存储库中修复警报的日期。

代码扫描

GitHub Enterprise Importer 不会迁移代码扫描警报。但是,警报在源存储库中作为 SARIF 数据可用。你可以使用 REST API 将此数据上传到目标存储库。有关更多信息,请参阅“代码扫描的 REST API 端点”。

通过这种方式填充的代码扫描警报将与源存储库中的原始警报不同。

  • 警报将仅包括检测和警报的最新状态,而不是源存储库中的整个时间线。
  • 警报将仅标识为openfixed。其他修复状态(例如dismissedreopened)将丢失。
  • 警报上所有事件的日期将是 API 调用的日期,而不是事件最初在源存储库中发生时的日期。
  • 所有参与者(例如警报创建者)都将更改为用于 API 调用的个人访问令牌的所有者。

Dependabot 警报

启用 Dependabot 警报和依赖项图时,Dependabot 警报将从默认分支的当前状态重新构建。这些警报的修复状态不会迁移,并且任何以前的警报也不会迁移。

您需要为 Dependabot 重新添加任何已加密的机密。有关详细信息,请参阅“为 Dependabot 配置对私有注册表的访问权限”。

启用 Webhook

源代码存储库中的所有活动 Webhook 都已迁移。但是,已迁移的 Webhook 默认情况下将被禁用。您可以在存储库设置中重新启用这些 Webhook。

  1. 导航到已迁移存储库的设置。
  2. 在侧边栏的“代码和自动化”部分,单击Webhook
  3. 在要启用的 Webhook 右侧,单击编辑
  4. 如果您使用机密令牌保护 Webhook,请在“机密”下重新添加机密。
  5. 在页面底部,选择活动
  6. 单击更新 Webhook

重新安装 GitHub 应用

如果您在源代码存储库上安装了任何 GitHub 应用,则需要在已迁移的存储库上重新安装它们。有关详细信息,请参阅“安装您自己的 GitHub 应用”。

重新创建团队

如果您以逐个组织的方式进行迁移,则只需恢复团队成员资格即可。如果您以逐个存储库的方式进行迁移,则需要重新创建团队、授予这些团队对存储库的访问权限,然后恢复团队成员资格。

为组织迁移重新创建团队

团队及其存储库访问权限作为组织迁移的一部分进行迁移,但团队成员资格不会迁移。迁移后,您必须将用户添加到已迁移的团队中。

我们强烈建议使用团队同步通过您的身份提供商 (IdP) 管理团队成员资格。有关详细信息,请参阅“为企业管理用户配置 SCIM 预配”或对于不使用企业管理用户的企业,“管理企业中组织的团队同步”。

否则,您可以手动向组织添加成员,然后将组织成员添加到团队中。有关详细信息,请参阅“将组织成员添加到团队”。

为存储库迁移重新创建团队

团队不会作为存储库迁移的一部分进行迁移。您必须手动重新创建团队,并为每个团队授予对存储库的访问权限。

  1. 重新创建团队。有关更多信息,请参阅“创建团队”。
  2. 将组织成员添加到团队。有关更多信息,请参阅“将组织成员添加到团队”。
  3. 为每个团队提供对存储库的访问权限。有关更多信息,请参阅“管理团队对组织存储库的访问权限”。

回收假人

使用 GitHub Enterprise Importer 运行迁移后,迁移存储库中的所有用户活动(Git 提交除外)都归因于称为假人的占位符身份。

你可以使用 GitHub CLI 或在浏览器中将每个假人的历史重新归因于组织成员。如果你使用 GitHub CLI,你可以批量回收假人。有关更多信息,请参阅“回收 GitHub Enterprise Importer 的假人”。

注意:只有组织所有者才能回收假人。如果你已获得迁移者角色,请联系组织所有者执行此步骤。

  1. 决定是否要回收假人。
  2. 规划完成回收的时间。
  3. 回收假人。
  4. 如果任何成员尚未通过团队成员资格获得对存储库的适当访问权限,请为这些成员提供对存储库的访问权限。有关更多信息,请参阅“管理个人对组织存储库的访问权限”。