跳至主要内容

将组织从 GitHub.com 迁移到 GitHub Enterprise Cloud

您可以使用 GitHub CLI 或 GraphQL API 将组织从 GitHub.com 迁移到 GitHub Enterprise Cloud。

工具导航

关于使用 GitHub Enterprise Importer 迁移组织

您可以使用 GitHub CLI 或 API 运行迁移。

GitHub CLI 简化了迁移过程,建议大多数客户使用。具有大量自定义需求的高级客户可以使用 API 来构建他们自己的 GitHub Enterprise Importer 集成。

要查看使用 API 的说明,请使用页面顶部的工具切换器。
要查看使用 GitHub CLI 的说明,请使用页面顶部的工具切换器。

先决条件

  • 我们强烈建议您进行迁移试运行,并在之后尽快完成生产迁移。要了解有关试运行的更多信息,请参阅“GitHub 产品之间迁移概述”。
  • 确保您了解将要迁移的数据以及 Importer 的已知支持限制。有关更多信息,请参阅“关于 GitHub 产品之间迁移”。
  • 虽然不是必需的,但我们建议在生产迁移期间停止工作。Importer 不支持增量迁移,因此迁移期间发生的任何更改都不会迁移。如果您选择在生产迁移期间不停止工作,则需要手动迁移这些更改。
  • 对于源组织,您必须是组织所有者或具有迁移者角色。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
  • 对于目标企业帐户,您必须是企业所有者。

步骤 0:准备使用 GitHub GraphQL API

要进行 GraphQL 查询,您需要编写自己的脚本或使用 HTTP 客户端,例如 Insomnia

要了解有关使用 GitHub GraphQL API 入门的更多信息,包括如何进行身份验证,请参阅“使用 GraphQL 形成调用”。

步骤 1:获取迁移目标的企业 ID

作为 GitHub.com 中的企业所有者,使用以下查询返回您想要拥有迁移组织的企业帐户的 ID。您需要企业 ID 来识别您的迁移目标。

query(
  $slug: String!
){
  enterprise (slug: $slug)
  {
    slug
    id
  }
}
查询变量描述
slug您企业帐户的 slug,您可以在查看企业 URL 时识别,例如 https://github.com/enterprises/SLUG

步骤 2:开始您的组织迁移

当您开始迁移时,单个组织及其伴随的数据将迁移到您在目标企业中标识的全新组织中。

mutation startOrganizationMigration (
  $sourceOrgUrl: URI!,
  $targetOrgName: String!,
  $targetEnterpriseId: ID!,
  $sourceAccessToken: String!,
	$targetAccessToken: String!
){
  startOrganizationMigration( input: {
    sourceOrgUrl: $sourceOrgUrl,
    targetOrgName: $targetOrgName,
    targetEnterpriseId: $targetEnterpriseId,
    sourceAccessToken: $sourceAccessToken,
		targetAccessToken: $targetAccessToken
  }) {
    orgMigration {
      id
    }
  }
}
查询变量描述
sourceOrgUrl源组织的 URL,例如 https://github.com/octo-org
targetOrgName您希望新组织具有的名称。必须在 GitHub.com 上独一无二。
targetEnterpriseId您要创建新组织的企业的 ID,由步骤 2 返回。
sourceAccessToken您用于源组织的个人访问令牌(经典)。有关要求,请参阅“管理 GitHub 产品之间迁移的访问权限”。
targetAccessToken您用于目标企业的个人访问令牌(经典)。

在下一步中,您将使用从 startOrganizationMigration 变异返回的迁移 ID 来检查迁移状态。

步骤 3:检查迁移状态

为了检测任何迁移失败并确保您的迁移正常工作,您可以查询您创建的 OrganizationMigration(s) 以使用 getMigration 查询查看迁移状态。

查询将返回一个状态,让您知道迁移是 queuedin progressfailed 还是 completed,以及有关有多少个存储库正在等待迁移的信息。如果您的迁移失败,Importer 将提供失败原因。

query (
  $id: ID!
){
  node( id: $id ) {
    ... on OrganizationMigration {
      id
			sourceOrgUrl
			targetOrgName
      state
      failure_reason
      remaining_repositories_count
      total_repositories_count
    }
  }
}
查询变量描述
id您迁移的 id

步骤 1:安装 GitHub CLI 的 GEI 扩展

如果这是您的第一次迁移,您需要安装 GitHub CLI 的 GEI 扩展。有关 GitHub CLI 的更多信息,请参阅“关于 GitHub CLI”。

  1. 安装 GitHub CLI。有关 GitHub CLI 的安装说明,请参阅 GitHub CLI 存储库

    注意:您需要 GitHub CLI 2.4.0 或更高版本。您可以使用 gh --version 命令检查您安装的版本。

  2. 安装 GEI 扩展。

    Shell
    gh extension install github/gh-gei
    

任何时候您需要 GEI 扩展的帮助,您都可以使用命令的 --help 标志。例如,gh gei --help 将列出所有可用命令,而 gh gei migrate-repo --help 将列出 migrate-repo 命令可用的所有选项。

步骤 2:更新 GitHub CLI 的 GEI 扩展

GEI 扩展每周更新一次。为了确保您使用的是最新版本,请更新扩展。

gh extension upgrade github/gh-gei

步骤 3:设置环境变量

在使用 GEI 扩展迁移到 GitHub Enterprise Cloud 之前,您必须创建可以访问源组织和目标企业的个人访问令牌(经典),然后将个人访问令牌(经典)设置为环境变量。

  1. 创建并记录一个满足所有要求以对源组织进行身份验证的个人访问令牌,以进行组织迁移。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。

  2. 创建并记录一个满足所有要求以对目标企业进行身份验证的个人访问令牌(经典),以进行组织迁移。

  3. 为个人访问令牌(经典)设置环境变量,将以下命令中的 TOKEN 替换为上面记录的个人访问令牌(经典)。对于目标企业,使用 GH_PAT;对于源组织,使用 GH_SOURCE_PAT

    • 如果您使用的是终端,请使用 export 命令。

      Shell
      export GH_PAT="TOKEN"
      export GH_SOURCE_PAT="TOKEN"
      
    • 如果您使用的是 PowerShell,请使用 $env 命令。

      Shell
      $env:GH_PAT="TOKEN"
      $env:GH_SOURCE_PAT="TOKEN"
      

步骤 4:迁移您的组织

要迁移组织,请使用 gh gei migrate-org 命令。

Shell
gh gei migrate-org --github-source-org SOURCE --github-target-org DESTINATION --github-target-enterprise ENTERPRISE

将上述命令中的占位符替换为以下值。

占位符
SOURCE源组织的名称
DESTINATION您希望新组织具有的名称。必须在 GitHub.com 上独一无二。
ENTERPRISE目标企业的标识符,您可以在企业帐户的 URL 中找到它,例如 https://github.com/enterprises/SLUG

步骤 5:验证您的迁移并检查错误日志

迁移完成后,建议您检查迁移日志存储库。有关更多信息,请参阅“访问 GitHub Enterprise Importer 的迁移日志”。

最后,建议您对您的组织和迁移的存储库进行完整性检查。