提示
按照本指南操作,可以参考 企业实时迁移 命令行界面参考 获取更详细的用法信息。 如果遇到错误,请参阅 排查从 GitHub Enterprise Server 到 GHE.com 的实时迁移问题。
先决条件
确保环境和开发人员已准备好进行迁移。 请参阅“准备从 GitHub Enterprise Server 到 GHE.com 的实时迁移”。
1. 配置 GitHub Enterprise Server
在创建令牌和执行迁移之前, GitHub Enterprise Server 必须在实例上设置一些配置。 这些配置值适用于所有 ELM 迁移。 GitHub Enterprise Server应用新配置时,开发人员可能会遇到短暂的停机时间。
-
GitHub Enterprise Server通过 SSH 访问管理程序。 请参阅“访问管理 shell (SSH)”。
-
使用
ghe-config. 设置以下配置变量。例如:
ghe-config app.elm-exporter.enabled true可变 将此设置为... app.elm-exporter.enabledtrueapp.elm.internal-webhooks-enabledtrueapp.elm-exporter.webhooks-loopback-address-enabledtruesecrets.elm-exporter.migration-target-url目标企业的 API URL(例如: https:/) 。/ api.octocorp.ghe.com
不要在 URL 的末尾包含尾部斜杠。 |
| secrets.elm-exporter.source-user | 与操作员令牌 GitHub Enterprise Server 关联的用户名。 这应该是你在 GitHub Enterprise Server 上的用户名;如果其他人要创建此令牌,则此处的值应设置为他们的用户名。 我们推荐ghe-admin用户。 |
-
应用配置。
Shell ghe-config-apply
ghe-config-apply -
退出 SSH 会话。 在本地终端会话中运行其余命令。
2.创建具有企业访问权限的操作员令牌
操作员必须使用向源企业和目标企业进行身份验证。 有关创建令牌的说明,请参阅 管理个人访问令牌。
确保记下这两个令牌,因为下一步将需要它们。
-
在 GitHub Enterprise Server 上,创建 personal access token (classic) 并选择所需的范围:
admin:enterprise
配置时,将此令牌用作源令牌ELM CLI。
-
在 GHE.com 上,创建一个 personal access token (classic) 并选择所需的作用域:
admin:enterpriseadmin:org
配置时,将此令牌用作目标令牌ELM CLI。
3.配置 ELM 命令行工具
你将从本地终端会话中运行迁移,并使用 GitHub CLI 的扩展程序。
-
在本地计算机上安装GitHub CLI。 必须使用版本 2.0 或更高版本。
-
安装 ELM 扩展。
Shell gh extension install github/gh-elm
gh extension install github/gh-elm -
启动安装向导以配置扩展。
Shell gh elm configure
gh elm configure -
按照安装向导中的说明操作,为源端和目标端提供 API URL(例如:
https://api.SUBDOMAIN.ghe.com),以及您在上一步中创建的令牌。
这些值中的任何值也可以作为 CLI 标志提供给任何 gh elm 命令,这将优先于配置。 例如: --target-url https://api.SUBDOMAIN.ghe.com。
此设置过程会将 URL 存储到操作系统配置目录中一个特定于平台的配置文件里,位置为 gh-elm/config.json。 访问令牌将安全地存储在计算机的机密存储中。
4.配置实时迁移机密
除了具有企业访问权限的操作员令牌外,还必须为源组织和目标组织创建一个 personal access token (classic) 令牌。 对于要从中迁移的每个组织,必须重复这些步骤。
创建访问令牌
ELM 必须使用 personal access token (classic) 对迁移的源和目标进行身份验证。 有关创建令牌的说明,请参阅 管理个人访问令牌。
请务必记下这些令牌,因为在下一步中会用到它们。
-
在GitHub Enterprise Server 上创建一个personal access token (classic),并使用以下作用域:
repoadmin:orgadmin:repo_hookadmin:org_hook
这是你的源令牌。
-
在 GHE.com 上创建一个具有以下范围的 personal access token (classic):
repoworkflowadmin:orgadmin:repo_hookadmin:enterprise
这是你的目标令牌。
重要
如果在 GHE.com 上对目标组织强制实施了单点登录,则必须为单点登录授权 GHE.com 令牌。
配置组织的 ELM 机密信息
使用 gh elm config 命令设置源和目标访问令牌:
-
设置源令牌。
Shell gh elm config set-source-pat EXISTING-GHES-ORG
gh elm config set-source-pat EXISTING-GHES-ORG当系统询问时,将源令牌粘贴到终端。
-
设置目标令牌。
Shell gh elm config set-target-pat EXISTING-GHES-ORG
gh elm config set-target-pat EXISTING-GHES-ORG当系统询问时,将目标令牌粘贴到终端。
您还可以通过 gh elm config org-tokens EXISTING-GHES-ORG 以交互方式设置令牌,或者在位于 https://GHES_HOSTNAME/organizations/EXISTING-GHES-ORG/settings/secrets/elm-exporter/ 的组织设置中进行设置。
5. 创建迁移
通过指定源和目标存储库详细信息创建新的迁移。
注意
target-org可以是新的或现有的。 如果目标组织尚不存在,则会在迁移期间创建它。 但是,不会迁移来自源组织的设置。
gh elm migration create \ --source-org EXISTING-GHES-ORG \ --source-repo EXISTING-GHES-REPO \ --target-org GHEC-ORG \ --target-repo NEW-GHEC-REPO
gh elm migration create \
--source-org EXISTING-GHES-ORG \
--source-repo EXISTING-GHES-REPO \
--target-org GHEC-ORG \
--target-repo NEW-GHEC-REPO
例如:
gh elm migration create \
--source-org my-ghes-org \
--source-repo my-ghes-repo \
--target-org my-dr-org \
--target-repo my-dr-repo
可选标志:
--start:如果已准备好立即开始迁移。--target-visibility:默认情况下,迁移的存储库是使用 内部 可见性创建的,但可以指定private。
保存迁移 ID
应会看到如下所示的响应:
{
"migrationId": "2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9",
"expiresAt": "2026-02-11T21:49:33.619162159Z"
}
导出 migrationId 为变量,因为下一个命令将需要它。 例如:
export MIGRATION_ID='2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9'
6. 开始迁移
如果尚未启动迁移,请使用刚刚保存的迁移 ID 立即启动它。
gh elm migration start --migration-id $MIGRATION_ID
gh elm migration start --migration-id $MIGRATION_ID
这会启动回填和实时更新过程。 ELM 正在从源存储库收集数据,并且监听支持的 Webhook 事件。
7. 监视迁移
迁移开始时,应会看到新的存储库。GHE.com 在迁移过程中,你将看到存储库填充了初始数据负载,并在开发人员继续在源存储库中工作时接收更新。
可以使用以下命令以交互方式 watch 监视迁移进度:
gh elm migration watch $MIGRATION_ID
这将轮询迁移状态 API,并显示一个可自动刷新的文本界面,以反映当前进度。
使用 migration status 进行程序化监控
如果您需要适用于自动化的迁移状态信息,请使用 status 命令:
gh elm migration status --migration-id $MIGRATION_ID
gh elm migration status --migration-id $MIGRATION_ID
响应中最重要的指示器是 combinedState 对象中的状态。 当状态达到 COMBINED_STATUS_READY_FOR_CUTOVER时,应准备好继续执行下一步。 但是,如果任何单个资源未能成功迁移,您可能需要对此进行调查,届时displayMessage中会发出警报。
例如:
"combinedState": {
"status": "COMBINED_STATUS_READY_FOR_CUTOVER",
"displayMessage": "Ready for cutover (1 resources failed)",
"repositories": [
{
"repositoryNwo": "new-test-org/my-new-repo",
"phase": "REPOSITORY_PHASE_READY_FOR_CUTOVER",
"displayStatus": "Ready for cutover (1 failed)"
}
],
"readyForCutover": true,
"cutoverBlockers": []
},
提示:
- 如果运行的是多个迁移,则可以检查
gh elm migration list所有这些迁移的状态。 此命令默认显示正在进行的迁移,但也可以按此--status进行筛选。 - 如果遇到需要注意的失败状态,请参阅 排查从 GitHub Enterprise Server 到 GHE.com 的实时迁移问题。
8. 完成迁移
当迁移准备好进行切换时,可以完成迁移。 切换过程将存档源存储库,使其永久处于只读状态,除非存储库管理员将其解除存档。
gh elm migration cutover --migration-id $MIGRATION_ID
gh elm migration cutover --migration-id $MIGRATION_ID
继续监视迁移。 在响应顶部看到 MIGRATION_STATUS_COMPLETED 状态时,迁移已完成,但仍有一些后续任务需要执行,以便为 GitHub Enterprise Server 的用户提供访问权限。
后续步骤
向用户授予对新存储库的访问权限,并将活动与用户帐户进行协调。 请参阅“完成从 GitHub Enterprise Server 到 GHE.com 的实时迁移”。