准备迁移数据
-
使用
scp
命令,将从源实例或组织生成的迁移存档复制到您的 GitHub Enterprise Server 目标scp -P 122 PATH-TO-MIGRATION-GUID.tar.gz admin@HOSTNAME:/home/admin/
-
SSH 登录到您的目标 GitHub Enterprise Server 实例。有关更多信息,请参阅“访问管理 shell (SSH)”。
ssh -p 122 admin@HOSTNAME
-
使用
ghe-migrator prepare
命令准备存档以在目标实例上导入,并为您生成新的迁移 GUID 以供您在后续步骤中使用ghe-migrator prepare /home/admin/MIGRATION-GUID.tar.gz
- 要开始新的导入尝试,请再次运行
ghe-migrator prepare
并获取新的迁移 GUID。 - 要指定迁移文件应存放的位置,请在命令后附加
--staging-path=/full/staging/path
。默认值为/data/user/tmp
。
- 要开始新的导入尝试,请再次运行
生成迁移冲突列表
-
使用
ghe-migrator conflicts
命令和迁移 GUID 生成一个 conflicts.csv 文件ghe-migrator conflicts -g MIGRATION-GUID > conflicts.csv
- 如果没有报告冲突,您可以安全地导入数据。
-
如果有冲突,请使用
scp
命令将 conflicts.csv 复制到您的本地计算机scp -P 122 admin@HOSTNAME:conflicts.csv ~/Desktop
-
继续到 "解决迁移冲突或设置自定义映射"。
查看迁移冲突
- 使用文本编辑器或 兼容 CSV 的电子表格软件 打开 conflicts.csv。
- 根据以下示例和参考表,查看 conflicts.csv 文件,以确保在导入时将采取适当的操作。
conflicts.csv 文件包含一个 迁移映射,其中列出了冲突和建议的操作。迁移映射列出了从源迁移的数据以及如何将数据应用于目标。
model_name | source_url | target_url | recommended_action |
---|---|---|---|
user | https://example-gh.source/octocat | https://example-gh.target/octocat | map |
organization | https://example-gh.source/octo-org | https://example-gh.target/octo-org | map |
repository | https://example-gh.source/octo-org/widgets | https://example-gh.target/octo-org/widgets | rename |
team | https://example-gh.source/orgs/octo-org/teams/admins | https://example-gh.target/orgs/octo-org/teams/admins | merge |
project | https://example-gh.source/octo-org/widgets/projects/1 | https://example-gh.target/octo-org/projects/1 | merge |
conflicts.csv 中的每一行都提供以下信息
Name | Description |
---|---|
model_name | 正在更改的数据类型。 |
source_url | 数据的源 URL。 |
target_url | 数据的预期目标 URL。 |
recommended_action | ghe-migrator 在导入数据时将采取的首选操作。 |
每种记录类型的可能映射
ghe-migrator
在传输数据时可以采取几种不同的映射操作
action | Description | Applicable models |
---|---|---|
import | (默认) 将源中的数据导入到目标。 | 所有记录类型 |
map | 不根据源数据创建新的模型,而是使用目标中现有的记录。这对于将存储库导入到现有组织或将目标中的用户身份映射到源中的用户身份很有用。 | 用户、组织、项目 |
rename | 将源中的数据重命名,然后复制到目标。 | 用户、组织、存储库、项目 |
map_or_rename | 如果目标存在,则映射到该目标。否则,重命名导入的模型。 | 用户 |
merge | 来自源的数据与目标上的现有数据合并。 | 团队,项目 |
我们强烈建议您查看conflicts.csv文件并使用ghe-migrator audit
以确保正在采取适当的操作。如果一切正常,您可以继续。
解决迁移冲突或设置自定义映射
如果您认为ghe-migrator
将执行不正确的更改,则可以通过更改conflicts.csv中的数据来进行更正。您可以对conflicts.csv中的任何行进行更改。
例如,假设您注意到来自源的octocat
用户正在映射到目标上的octocat
。
model_name | source_url | target_url | recommended_action |
---|---|---|---|
user | https://example-gh.source/octocat | https://example-gh.target/octocat | map |
您可以选择将用户映射到目标上的其他用户。假设您知道octocat
实际上应该是目标上的monalisa
。您可以更改conflicts.csv中的target_url
列以引用monalisa
。
model_name | source_url | target_url | recommended_action |
---|---|---|---|
user | https://example-gh.source/octocat | https://example-gh.target/monalisa | map |
另一个例子,如果您想将octo-org/widgets
存储库重命名为目标实例上的octo-org/amazing-widgets
,请将target_url
更改为octo-org/amazing-widgets
并将recommend_action
更改为rename
。
model_name | source_url | target_url | recommended_action |
---|---|---|---|
repository | https://example-gh.source/octo-org/widgets | https://example-gh.target/octo-org/amazing-widgets | rename |
添加自定义映射
迁移期间的常见场景是迁移的用户在目标上的用户名与他们在源上的用户名不同。
给定源中的用户名列表和目标上的用户名列表,您可以构建一个包含自定义映射的 CSV 文件,然后将其应用以确保每个用户的用户名和内容在迁移结束时正确归属给他们。
您可以使用ghe-migrator audit
命令快速生成要迁移的用户 CSV,该 CSV 格式需要应用自定义映射。
ghe-migrator audit -m user -g MIGRATION-GUID > users.csv
现在,您可以编辑该 CSV 文件,为要映射或重命名的每个用户输入新的 URL,然后更新第四列以包含map
或rename
,具体取决于情况。
例如,要将目标https://example-gh.target
上的用户octocat
重命名为monalisa
,您需要创建包含以下内容的行:
model_name | source_url | target_url | 状态 |
---|---|---|---|
user | https://example-gh.source/octocat | https://example-gh.target/monalisa | rename |
相同流程可用于为支持自定义映射的每个记录创建映射。有关更多信息,请参阅我们关于记录可能映射的表格。
应用修改后的迁移数据
-
更改后,使用
scp
命令将修改后的conflicts.csv(或任何其他格式正确的映射.csv文件)应用于目标实例。scp -P 122 ~/Desktop/conflicts.csv admin@HOSTNAME:/home/admin/
-
使用
ghe-migrator map
命令重新映射迁移数据,传入修改后的.csv文件的路径和迁移 GUID。ghe-migrator map -i conflicts.csv -g MIGRATION-GUID
-
如果
ghe-migrator map -i conflicts.csv -g MIGRATION-GUID
命令报告仍然存在冲突,请再次执行迁移冲突解决过程。
在 GitHub Enterprise Server 上应用导入的数据
-
SSH 登录到您的目标 GitHub Enterprise Server 实例。有关更多信息,请参阅“访问管理 shell (SSH)”。
ssh -p 122 admin@HOSTNAME
-
使用
ghe-migrator import
命令启动导入过程。您需要:- 您的迁移 GUID。有关更多信息,请参阅“准备要导入 GitHub Enterprise Server 的迁移数据”。
- 用于身份验证的个人访问令牌。您使用的个人访问令牌仅用于作为站点管理员进行身份验证,不需要任何特定范围或权限。有关更多信息,请参阅“管理您的个人访问令牌”。
$ ghe-migrator import /home/admin/MIGRATION-GUID.tar.gz -g MIGRATION-GUID -u USERNAME -p TOKEN > Starting GitHub::Migrator > Import 100% complete /
- 要指定迁移文件应存放的位置,请在命令后附加
--staging-path=/full/staging/path
。默认值为/data/user/tmp
。
查看迁移数据
默认情况下,ghe-migrator audit
返回所有记录。它还允许您按以下条件筛选记录:
- 记录类型。
- 记录状态。
记录类型与迁移数据中找到的类型匹配。
记录类型过滤器
记录类型 | 过滤器名称 |
---|---|
用户 | user |
组织 | organization |
仓库 | repository |
团队 | team |
里程碑 | 里程碑 |
项目(经典) | project |
问题 | 问题 |
问题评论 | issue_comment |
拉取请求 | pull_request |
拉取请求审查 | pull_request_review |
提交评论 | commit_comment |
拉取请求审查评论 | pull_request_review_comment |
发布 | release |
对拉取请求或问题的操作 | issue_event |
受保护的分支 | protected_branch |
记录状态过滤器
记录状态 | Description |
---|---|
导出 | 记录将被导出。 |
import | 记录将被导入。 |
map | 记录将被映射。 |
rename | 记录将被重命名。 |
merge | 记录将被合并。 |
已导出 | 记录已成功导出。 |
已导入 | 记录已成功导入。 |
已映射 | 记录已成功映射。 |
已重命名 | 记录已成功重命名。 |
已合并 | 记录已成功合并。 |
导出失败 | 记录导出失败。 |
导入失败 | 记录导入失败。 |
映射失败 | 记录映射失败。 |
重命名失败 | 记录重命名失败。 |
合并失败 | 记录合并失败。 |
筛选已审计记录
使用 ghe-migrator audit
命令,您可以使用 -m
标志根据记录类型进行筛选。类似地,您可以使用 -s
标志根据导入状态进行筛选。该命令如下所示
ghe-migrator audit -m RECORD_TYPE -s STATE -g MIGRATION-GUID
例如,要查看所有成功导入的组织和团队,您需要输入
$ ghe-migrator audit -m organization,team -s mapped,renamed -g MIGRATION-GUID
> model_name,source_url,target_url,state
> organization,https://gh.source/octo-org/,https://ghe.target/octo-org/,renamed
我们强烈建议您审计所有失败的导入。 为此,您需要输入
$ ghe-migrator audit -s failed_import,failed_map,failed_rename,failed_merge -g MIGRATION-GUID
> model_name,source_url,target_url,state
> user,https://gh.source/octocat,https://gh.target/octocat,failed
> repository,https://gh.source/octo-org/octo-project,https://ghe.target/octo-org/octo-project,failed
如果您对导入失败有任何疑虑,您可以访问 GitHub Enterprise 支持 与我们联系。
在 GitHub Enterprise Server 上完成导入
将迁移应用到目标实例并查看迁移后,您将解锁存储库并将其从源中删除。在删除源数据之前,我们建议您等待大约两周,以确保一切正常运行。
解锁目标实例上的存储库
-
通过 SSH 连接到 GitHub.com。如果您的实例包含多个节点(例如,如果配置了高可用性或地理复制),请连接到主节点。如果您使用的是集群,则可以连接到任何节点。将 HOSTNAME 替换为您的实例的 hostname,或节点的 hostname 或 IP 地址。有关更多信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME
-
使用 `ghe-migrator unlock` 命令解锁所有导入的仓库。您需要您的迁移 GUID。
$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project
警告:如果您的仓库包含使用 `schedule` 触发器的 GitHub Actions 工作流,则导入后这些工作流不会自动运行。要重新启动计划的工作流,请向仓库推送一个提交。有关更多信息,请参阅“触发工作流的事件”。
解锁源上的仓库
从 GitHub.com 上的组织解锁仓库
要解锁 GitHub.com 组织上的仓库,您需要向 迁移解锁端点 发送一个 `DELETE` 请求。您需要:
- 您的访问令牌用于身份验证
- 迁移的唯一 `id`
- 要解锁的仓库的名称
curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
-H "Accept: application/vnd.github.wyandotte-preview+json" \
https://api.github.com/orgs/ORG-NAME/migrations/ID/repos/REPO_NAME/lock
从 GitHub.com 上的组织删除仓库
解锁 GitHub.com 组织的仓库后,您应该删除之前使用 仓库删除端点 迁移的每个仓库。您需要您的访问令牌用于身份验证
curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
https://api.github.com/repos/ORG-NAME/REPO_NAME
从 GitHub Enterprise Server 实例解锁仓库
-
通过 SSH 连接到 GitHub.com。如果您的实例包含多个节点(例如,如果配置了高可用性或地理复制),请连接到主节点。如果您使用的是集群,则可以连接到任何节点。将 HOSTNAME 替换为您的实例的 hostname,或节点的 hostname 或 IP 地址。有关更多信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME
-
使用 `ghe-migrator unlock` 命令解锁所有导入的仓库。您需要您的迁移 GUID。
$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project