跳至主要内容

将数据迁移到 GitHub Enterprise Server

在生成迁移存档后,您可以将数据导入到目标 GitHub Enterprise Server 实例。您将能够在将更改永久应用到目标实例之前查看更改以查找潜在的冲突。

准备迁移数据

  1. 使用 scp 命令,将从源实例或组织生成的迁移存档复制到您的 GitHub Enterprise Server 目标

    scp -P 122 PATH-TO-MIGRATION-GUID.tar.gz admin@HOSTNAME:/home/admin/
    
  2. SSH 登录到您的目标 GitHub Enterprise Server 实例。有关更多信息,请参阅“访问管理 shell (SSH)”。

    ssh -p 122 admin@HOSTNAME
    
  3. 使用 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

生成迁移冲突列表

  1. 使用 ghe-migrator conflicts 命令和迁移 GUID 生成一个 conflicts.csv 文件

    ghe-migrator conflicts -g MIGRATION-GUID > conflicts.csv
    
    • 如果没有报告冲突,您可以安全地导入数据。
  2. 如果有冲突,请使用 scp 命令将 conflicts.csv 复制到您的本地计算机

    scp -P 122 admin@HOSTNAME:conflicts.csv ~/Desktop
    
  3. 继续到 "解决迁移冲突或设置自定义映射"。

查看迁移冲突

  1. 使用文本编辑器或 兼容 CSV 的电子表格软件 打开 conflicts.csv
  2. 根据以下示例和参考表,查看 conflicts.csv 文件,以确保在导入时将采取适当的操作。

conflicts.csv 文件包含一个 迁移映射,其中列出了冲突和建议的操作。迁移映射列出了从源迁移的数据以及如何将数据应用于目标。

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/octocatmap
organizationhttps://example-gh.source/octo-orghttps://example-gh.target/octo-orgmap
repositoryhttps://example-gh.source/octo-org/widgetshttps://example-gh.target/octo-org/widgetsrename
teamhttps://example-gh.source/orgs/octo-org/teams/adminshttps://example-gh.target/orgs/octo-org/teams/adminsmerge
projecthttps://example-gh.source/octo-org/widgets/projects/1https://example-gh.target/octo-org/projects/1merge

conflicts.csv 中的每一行都提供以下信息

NameDescription
model_name正在更改的数据类型。
source_url数据的源 URL。
target_url数据的预期目标 URL。
recommended_actionghe-migrator 在导入数据时将采取的首选操作。

每种记录类型的可能映射

ghe-migrator 在传输数据时可以采取几种不同的映射操作

actionDescriptionApplicable models
import(默认) 将源中的数据导入到目标。所有记录类型
map不根据源数据创建新的模型,而是使用目标中现有的记录。这对于将存储库导入到现有组织或将目标中的用户身份映射到源中的用户身份很有用。用户、组织、项目
rename将源中的数据重命名,然后复制到目标。用户、组织、存储库、项目
map_or_rename如果目标存在,则映射到该目标。否则,重命名导入的模型。用户
merge来自源的数据与目标上的现有数据合并。团队,项目

我们强烈建议您查看conflicts.csv文件并使用ghe-migrator audit以确保正在采取适当的操作。如果一切正常,您可以继续。

解决迁移冲突或设置自定义映射

如果您认为ghe-migrator将执行不正确的更改,则可以通过更改conflicts.csv中的数据来进行更正。您可以对conflicts.csv中的任何行进行更改。

例如,假设您注意到来自源的octocat用户正在映射到目标上的octocat

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/octocatmap

您可以选择将用户映射到目标上的其他用户。假设您知道octocat实际上应该是目标上的monalisa。您可以更改conflicts.csv中的target_url列以引用monalisa

model_namesource_urltarget_urlrecommended_action
userhttps://example-gh.source/octocathttps://example-gh.target/monalisamap

另一个例子,如果您想将octo-org/widgets存储库重命名为目标实例上的octo-org/amazing-widgets,请将target_url更改为octo-org/amazing-widgets并将recommend_action更改为rename

model_namesource_urltarget_urlrecommended_action
repositoryhttps://example-gh.source/octo-org/widgetshttps://example-gh.target/octo-org/amazing-widgetsrename

添加自定义映射

迁移期间的常见场景是迁移的用户在目标上的用户名与他们在源上的用户名不同。

给定源中的用户名列表和目标上的用户名列表,您可以构建一个包含自定义映射的 CSV 文件,然后将其应用以确保每个用户的用户名和内容在迁移结束时正确归属给他们。

您可以使用ghe-migrator audit命令快速生成要迁移的用户 CSV,该 CSV 格式需要应用自定义映射。

ghe-migrator audit -m user -g MIGRATION-GUID > users.csv

现在,您可以编辑该 CSV 文件,为要映射或重命名的每个用户输入新的 URL,然后更新第四列以包含maprename,具体取决于情况。

例如,要将目标https://example-gh.target上的用户octocat重命名为monalisa,您需要创建包含以下内容的行:

model_namesource_urltarget_url状态
userhttps://example-gh.source/octocathttps://example-gh.target/monalisarename

相同流程可用于为支持自定义映射的每个记录创建映射。有关更多信息,请参阅我们关于记录可能映射的表格

应用修改后的迁移数据

  1. 更改后,使用scp命令将修改后的conflicts.csv(或任何其他格式正确的映射.csv文件)应用于目标实例。

    scp -P 122 ~/Desktop/conflicts.csv admin@HOSTNAME:/home/admin/
    
  2. 使用ghe-migrator map命令重新映射迁移数据,传入修改后的.csv文件的路径和迁移 GUID。

    ghe-migrator map -i conflicts.csv  -g MIGRATION-GUID
    
  3. 如果ghe-migrator map -i conflicts.csv -g MIGRATION-GUID命令报告仍然存在冲突,请再次执行迁移冲突解决过程。

在 GitHub Enterprise Server 上应用导入的数据

  1. SSH 登录到您的目标 GitHub Enterprise Server 实例。有关更多信息,请参阅“访问管理 shell (SSH)”。

    ssh -p 122 admin@HOSTNAME
    
  2. 使用ghe-migrator import命令启动导入过程。您需要:

    $ 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 上完成导入

将迁移应用到目标实例并查看迁移后,您将解锁存储库并将其从源中删除。在删除源数据之前,我们建议您等待大约两周,以确保一切正常运行。

解锁目标实例上的存储库

  1. 通过 SSH 连接到 GitHub.com。如果您的实例包含多个节点(例如,如果配置了高可用性或地理复制),请连接到主节点。如果您使用的是集群,则可以连接到任何节点。将 HOSTNAME 替换为您的实例的 hostname,或节点的 hostname 或 IP 地址。有关更多信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 使用 `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 实例解锁仓库

  1. 通过 SSH 连接到 GitHub.com。如果您的实例包含多个节点(例如,如果配置了高可用性或地理复制),请连接到主节点。如果您使用的是集群,则可以连接到任何节点。将 HOSTNAME 替换为您的实例的 hostname,或节点的 hostname 或 IP 地址。有关更多信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 使用 `ghe-migrator unlock` 命令解锁所有导入的仓库。您需要您的迁移 GUID。

$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project