关于使用 GitHub Enterprise Importer 进行组织迁移
迁移到 GitHub Enterprise Cloud 包括在 GitHub.com 上的帐户之间进行迁移,以及如果您正在采用数据驻留,则迁移到您企业 GHE.com 的子域。
您可以使用 GitHub CLI 或 API 运行迁移。
GitHub CLI 简化了迁移过程,建议大多数客户使用。具有大量自定义需求的高级客户可以使用 API 来构建他们自己的与 GitHub Enterprise Importer 集成。
先决条件
- 我们强烈建议您执行迁移试运行,并在之后尽快完成生产迁移。要了解有关试运行的更多信息,请参阅“GitHub 产品之间迁移概述”。
- 确保您了解将要迁移的数据以及 Importer 的已知支持限制。有关更多信息,请参阅“GitHub 产品之间迁移简介”。
- 虽然不是必需的,但我们建议在生产迁移期间停止工作。Importer 不支持增量迁移,因此在迁移期间发生的任何更改都不会迁移。如果您选择不在生产迁移期间停止工作,则需要手动迁移这些更改。
- 对于源组织,您必须是组织所有者或具有迁移者角色。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
- 对于目标企业帐户,您必须是企业所有者。
步骤 0:准备使用 GitHub GraphQL API
要进行 GraphQL 查询,您需要编写自己的脚本或使用像 Insomnia 这样的 HTTP 客户端。
要了解有关 GitHub GraphQL API 入门的更多信息,包括如何进行身份验证,请参阅“使用 GraphQL 形成调用”。
您将向迁移的**目标**发送所有 GraphQL 查询。如果您要迁移到具有数据驻留的 GitHub Enterprise Cloud,请确保将查询发送到您企业 GHE.com 子域的端点。
步骤 1:获取迁移目标的企业 ID
作为 GitHub.com 中的企业所有者,使用以下查询返回您希望拥有已迁移组织的企业帐户的 ID。您需要企业 ID 来识别迁移目标。
query(
$slug: String!
){
enterprise (slug: $slug)
{
slug
id
}
}
查询变量 | 描述 |
---|---|
slug | 您企业帐户的 slug,您可以通过查看企业 URL 来识别,例如 https://github.com/enterprises/SLUG 或 https://SLUG.ghe.com 。 |
步骤 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 | 您希望新组织具有的名称。在您的目标平台上不能与其他组织共享。 |
targetEnterpriseId | 您要在其中创建新组织的企业的 ID,由步骤 2 返回。 |
sourceAccessToken | 源组织的个人访问令牌(传统)。有关要求,请参阅“管理 GitHub 产品之间迁移的访问权限”。 |
targetAccessToken | 目标企业的个人访问令牌(传统)。 |
在下一步中,您将使用从 startOrganizationMigration
突变返回的迁移 ID 来检查迁移状态。
步骤 3:检查迁移状态
为了检测任何迁移失败并确保您的迁移正常工作,您可以查询您创建的`OrganizationMigration`,使用`getMigration`查询查看迁移状态。
查询将返回一个状态,让您知道迁移是`queued`(排队)、`in progress`(进行中)、`failed`(失败)还是`completed`(已完成),以及有关有多少存储库正在等待迁移的信息。如果您的迁移失败,导入器将提供失败原因。
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”。
-
安装 GitHub CLI。有关 GitHub CLI 的安装说明,请参阅GitHub CLI 存储库。
注意
您需要 GitHub CLI 2.4.0 或更高版本。您可以使用`gh --version`命令检查您安装的版本。
-
安装 GEI 扩展。
Shell gh extension install github/gh-gei
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 之前,您必须创建可以访问源组织和目标企业的个人访问令牌(经典),然后将个人访问令牌(经典)设置为环境变量。
-
创建并记录一个满足所有要求以对源组织进行身份验证的个人访问令牌,以进行组织迁移。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
-
创建并记录一个满足所有要求以对目标企业进行身份验证的个人访问令牌(经典),以进行组织迁移。
-
为个人访问令牌(经典)设置环境变量,将以下命令中的 TOKEN 替换为您上面记录的个人访问令牌(经典)。对目标企业使用`GH_PAT`,对源组织使用`GH_SOURCE_PAT`。
-
如果您使用的是终端,请使用`export`命令。
Shell export GH_PAT="TOKEN" export GH_SOURCE_PAT="TOKEN"
export GH_PAT="TOKEN" export GH_SOURCE_PAT="TOKEN"
-
如果您使用的是 PowerShell,请使用`$env`命令。
Shell $env:GH_PAT="TOKEN" $env:GH_SOURCE_PAT="TOKEN"
$env:GH_PAT="TOKEN" $env:GH_SOURCE_PAT="TOKEN"
-
-
如果您要迁移到具有数据驻留的 GitHub Enterprise Cloud,为了方便起见,请为企业的**基本 API URL**设置一个环境变量。例如
Shell export TARGET_API_URL="https://api.octocorp.ghe.com"
export TARGET_API_URL="https://api.octocorp.ghe.com"
您将在使用 GitHub CLI 运行的命令中,使用此变量与`--target-api-url`选项一起使用。
步骤 4:迁移您的组织
要迁移组织,请使用`gh gei migrate-org`命令。
gh gei migrate-org --github-source-org SOURCE --github-target-org DESTINATION --github-target-enterprise ENTERPRISE
gh gei migrate-org --github-source-org SOURCE --github-target-org DESTINATION --github-target-enterprise ENTERPRISE
注意
如果您要迁移到 GHE.com,请添加`--target-api-url TARGET-API-URL`,其中 TARGET-API-URL 是您企业子域的基本 API URL。例如:`https://api.octocorp.ghe.com`。
将以上命令中的占位符替换为以下值。
占位符 | 值 |
---|---|
SOURCE | 源组织的名称 |
DESTINATION | 您希望新组织具有的名称。在您的目标平台上不能与其他组织共享。 |
ENTERPRISE | 您的目标企业的slug,您可以通过查看企业帐户的 URL 来识别,`https://github.com/enterprises/SLUG`或`https://SLUG.ghe.com`。 |
步骤 5:验证您的迁移并检查错误日志
迁移完成后,我们建议您检查迁移日志存储库。有关更多信息,请参阅“访问 GitHub 企业导入器的迁移日志”。
最后,我们建议您对您的组织和迁移的存储库进行完整性检查。