跳至主要内容

关于 GitHub 产品之间的迁移

了解 GitHub Enterprise Importer 可以迁移哪些 GitHub 产品之间的哪些数据。

关于 GitHub 产品之间的迁移

使用 GitHub Enterprise Importer,您可以将数据从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud,或在 GitHub Enterprise Cloud 上的帐户之间迁移数据。有关更多信息,请参阅“关于 GitHub Enterprise Importer”。

如果您的迁移源是 GitHub.com 上的另一个帐户,您可以将单个仓库在组织之间迁移,或将整个组织在企业之间迁移。如果您的迁移源是 GitHub Enterprise Server,您可以迁移仓库。

GitHub Enterprise Importer 迁移的数据取决于迁移的来源以及您是迁移仓库还是组织。

从 GitHub Enterprise Server 迁移的数据

要从 GitHub Enterprise Server (GHES) 迁移,您必须使用 GHES 版本 3.4.1 或更高版本。迁移的数据取决于您使用的版本。

项目GHES 3.4.1+GHES 3.5.0+
Git 源(包括提交历史记录)
拉取请求
问题
里程碑
Wiki
存储库级别的项目(经典)
GitHub Actions 工作流
提交评论
活动 Webhook
分支保护
GitHub Pages 设置
上述数据的用户历史记录
附件(请参阅 "附加文件")
发布

每个存储库的尺寸限制因您的 GHES 版本而异。

限制GHES <3.8.0GHES 3.8.0+
Git 源代码2GB10GB
元数据2GB10GB

未迁移的数据

目前,以下数据**未**迁移。

  • 代码扫描结果
  • 提交状态检查
  • Dependabot 提醒
  • Dependabot 密钥
  • 存储库级别的讨论
  • 问题评论和拉取请求评论的编辑历史记录
  • 存储库之间的分叉关系(请参阅 "关于分叉")
  • GitHub Actions 密钥、变量、环境、自托管运行器、大型运行器或工作流运行历史记录
  • GitHub Apps 和 GitHub App 安装
  • Git LFS 对象和大型二进制文件(使用 Git LFS 的存储库仍然受支持,请参阅 "GitHub Enterprise Importer 的限制")
  • GitHub Packages 中的软件包
  • 组织级别的项目(经典)
  • 项目(新的项目体验)
  • 不同存储库中拉取请求和问题之间的引用(请参阅 "自动链接的引用和 URL")
  • 密钥扫描结果的修复状态
  • 用户帐户拥有的存储库
  • 存储库属性
  • 存储库星标
  • 存储库观察者
  • 规则集
  • 标签保护规则
  • 用户的个人资料、SSH 密钥、签名密钥或个人访问令牌
  • Webhook 密钥
  • 团队
  • 用户或团队对仓库的访问权限
  • 拉取请求的仓库设置

分支保护

分支保护会对特定分支名称或分支名称模式应用一组指定的规则。有关更多信息,请参阅“关于受保护的分支”。

分支保护将始终迁移,但某些规则不会迁移。以下分支保护规则不会迁移。

  • 允许特定参与者绕过所需的拉取请求
  • 要求批准最新的推送
  • 要求部署成功才能合并
  • 锁定分支
  • 限制创建匹配分支的推送
  • 允许强制推送

以下限制也适用

  • 如果分支保护规则可以选择让你指定不受规则约束的人员、团队或应用程序,例如“限制谁可以驳回拉取请求审查”,则这些例外情况将不会迁移。
  • 如果在“指定谁可以强制推送”模式下启用了“允许强制推送”规则,则该规则将不会迁移。

从 GitHub.com 上的其他帐户迁移的数据

如果你的迁移源是 GitHub.com 上的另一个帐户,你可以将单个仓库迁移到组织之间,或将整个组织迁移到企业之间。

组织的迁移数据

迁移组织时,将在目标企业帐户中创建一个新组织。然后,以下数据将迁移到新组织。

  • 团队
  • 仓库
  • 团队对仓库的访问权限
  • 成员权限
  • 组织级 Webhook(必须在迁移后重新启用,请参阅“启用 Webhook”)。
  • 在组织中创建的新仓库的默认分支名称

所有仓库都将以私有可见性迁移。如果你想将仓库的可见性设置为公开或内部,你可以在迁移后使用 UI 或 API 完成此操作。

团队成员身份**不会**迁移。迁移后,您需要将成员添加到已迁移的团队。有关更多信息,请参阅“GitHub 产品之间迁移概述”。

注意:对团队的引用,例如 @octo-org/octo-team,**不会**在组织迁移过程中更新。这可能会导致目标组织出现问题,例如 CODEOWNERS 文件无法按预期工作。有关如何防止和解决这些问题的更多信息,请参阅“使用 GitHub Enterprise Importer 疑难解答迁移”。

已迁移存储库的数据

当您迁移存储库时,无论是直接迁移还是作为组织迁移的一部分,只有以下数据会被迁移。

  • Git 源(包括提交历史记录)
  • 拉取请求
  • 问题
  • 里程碑
  • Wiki(不包括附件)
  • 存储库级别的项目(经典)
  • GitHub Actions 工作流
  • 提交评论
  • 活动 Webhook(必须在迁移后重新启用,请参阅“启用 Webhook”)
  • 存储库主题
  • 存储库设置
    • 分支保护(有关更多详细信息,请参阅“分支保护”)
    • GitHub Pages 设置
    • 自动链接引用
    • GitHub 高级安全设置
    • 拉取请求设置
      • 自动删除头部分支
      • 允许自动合并
      • 允许合并提交(提交消息设置将重置为默认消息)
      • 允许压缩合并(提交消息设置将重置为默认消息)
      • 允许变基合并
  • 发布(每个存储库最多 10 GB)
  • 上述数据的用户历史记录
  • 附件(请参阅 "附加文件")

未迁移的数据

目前,以下数据**未**迁移。

  • Codespaces 密钥
  • 代码扫描结果
  • 提交状态检查
  • Dependabot 提醒
  • Dependabot 密钥
  • 存储库级别的讨论
  • 问题评论和拉取请求评论的编辑历史记录
  • 存储库之间的分叉关系(请参阅 "关于分叉")
  • GitHub Actions 密钥、变量、环境、自托管运行器、大型运行器或工作流运行历史记录
  • GitHub Apps 和 GitHub App 安装
  • Git LFS 对象和大型二进制文件(使用 Git LFS 的存储库仍然受支持,请参阅 "GitHub Enterprise Importer 的限制")
  • GitHub Packages 中的软件包
  • 组织级别的项目(经典)
  • 项目(新的项目体验)
  • 不同存储库中拉取请求和问题之间的引用(请参阅 "自动链接的引用和 URL")
  • 密钥扫描结果的修复状态
  • 用户帐户拥有的存储库
  • 存储库属性
  • 存储库星标
  • 存储库观察者
  • 规则集
  • 标签保护规则
  • 用户的个人资料、SSH 密钥、签名密钥或个人访问令牌
  • Webhook 密钥
  • 用户对存储库的访问权限

当您直接迁移存储库时,团队和团队对存储库的访问权限不会迁移。

分支保护

分支保护会对特定分支名称或分支名称模式应用一组指定的规则。有关更多信息,请参阅“关于受保护的分支”。

分支保护将始终迁移,但某些规则不会迁移。以下分支保护规则不会迁移。

  • 允许特定参与者绕过所需的拉取请求
  • 要求批准最新的推送
  • 要求部署成功才能合并
  • 锁定分支
  • 限制创建匹配分支的推送
  • 允许强制推送

以下限制也适用

  • 如果分支保护规则可以选择让你指定不受规则约束的人员、团队或应用程序,例如“限制谁可以驳回拉取请求审查”,则这些例外情况将不会迁移。
  • 如果在“指定谁可以强制推送”模式下启用了“允许强制推送”规则,则该规则将不会迁移。

已迁移数据的限制

GitHub Enterprise Importer 可以迁移的内容有限制。有些限制是由于 GitHub.com 的限制,而另一些限制则是 GitHub Enterprise Importer 本身的限制。

GitHub.com 的限制

  • 单个 Git 提交的 2 GB 大小限制:Git 存储库中的单个提交不能超过 2 GB。如果您的任何提交大于 2 GB,则需要将提交拆分为多个较小的提交,每个提交的大小不超过 2 GB。
  • Git 引用 255 字节限制:单个 Git 引用(通常称为“引用”)的名称不能超过 255 字节。通常,这意味着您的引用不能超过 255 个字符,但任何非 ASCII 字符(例如表情符号)可能占用超过一个字节。如果您的任何 Git 引用过大,我们将返回一条清晰的错误消息。
  • 文件大小限制为 100 MB:您的 Git 仓库中任何单个文件的大小不能超过 100 MB。请考虑使用 Git LFS 来存储大型文件。有关更多信息,请参阅“管理大型文件”。

GitHub Enterprise Importer 的限制

  • Git 仓库大小限制为 10 GB:此限制仅适用于源代码。要检查仓库存档是否超过限制,请使用 git-sizer 工具并查看输出中的总 Blob 大小。git-sizer 工具还有助于识别可能影响迁移的大型文件、Blob 大小、提交大小和树计数相关的问题。
  • 元数据限制为 10 GB:Importer 无法迁移元数据超过 10 GB 的仓库。元数据包括问题、拉取请求、发布和附件。在大多数情况下,大型元数据是由附加到发布的二进制资产引起的。您可以使用 migrate-repo 命令的 --skip-releases 标志从迁移中排除发布,然后在迁移完成后手动移动您的发布。
  • 未迁移 Git LFS 对象:Importer 可以迁移使用 Git LFS 的仓库,但 LFS 对象本身不会被迁移。它们可以在迁移完成后作为后续任务推送到您的迁移目标。有关更多信息,请参阅“复制仓库”。
  • 需要后续任务:在 GitHub 产品之间迁移时,某些设置不会被迁移,必须在新的仓库中重新配置。有关在每次迁移后需要完成的后续任务列表,请参阅“GitHub 产品之间迁移概述”。
  • 代码搜索功能延迟: 迁移存储库后,重新索引搜索索引可能需要几个小时,在此期间,代码搜索可能会返回意外结果,直到重新索引完成。
  • 为您的组织配置的规则集可能会导致迁移失败:例如,如果您配置了一条规则,要求提交作者的电子邮件地址以 @monalisa.cat 结尾,而您要迁移的存储库包含不符合此规则的提交,则您的迁移将失败。有关规则集的更多信息,请参阅 "关于规则集."
  • 模特内容可能无法搜索:模特是占位符用户,导入的内容(如问题、拉取请求、评论等)与之相关联。当您搜索与模特相关联的内容(如分配的问题)时,可能无法找到这些问题。一旦模特被回收,可以通过新所有者找到该内容。有关更多信息,请参阅 "为 GitHub Enterprise Importer 回收模特."

入门

在 GitHub 产品之间迁移之前,您应该计划好如何运行迁移。在迁移任何数据之前,您需要选择一个人来运行迁移。您必须授予该人对迁移源和目标的必要访问权限。我们还建议您先进行试用迁移。

有关从头到尾的迁移过程概述,请参阅 "GitHub 产品之间迁移概述."