跳至主要内容

关于 GitHub 产品之间的迁移

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

关于 GitHub 产品之间的迁移

使用 GitHub Enterprise Importer,您可以将数据从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud,或将数据从 GitHub.com 迁移到 GitHub Enterprise Cloud 上的另一个账户。

例如,GitHub Enterprise Importer 可以帮助您的公司

  • 通过将企业迁移到 GHE.com,实现数据驻留并采用 GitHub Enterprise Cloud
  • 通过在 GitHub.com 上的企业之间迁移,采用 GitHub.com 的特定功能,例如企业托管用户或新的计费模式
  • 通过从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud,受益于简化的管理和新功能

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

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

迁移到 GitHub Enterprise Cloud 的注意事项

在使用 GitHub Enterprise Importer 之前,请了解以下注意事项

  • 如果您已经使用 GitHub Enterprise Cloud:GitHub Enterprise 计划仅授予您一次 GitHub Enterprise Cloud 部署权限。

    例如,如果您已经使用 GitHub.com,同时还想将 GitHub Enterprise Server 迁移到 GHE.com,则两者的使用将不在同一计划覆盖范围内。

  • 如果您迁移到企业托管用户:您需要与身份提供商集成以管理用户账户。在开始之前检查身份提供商的支持等级。参见关于企业托管用户

  • 如果您从 GitHub Enterprise Server 迁移:请注意,GitHub 对某些操作实施速率限制,而这些限制在 GitHub Enterprise Server 上默认是关闭的。参见REST API 的速率限制

  • 如果您迁移到具备数据驻留的 GitHub Enterprise Cloud:请注意,某些功能不可用,部分功能需要不同或额外的配置。参见具备数据驻留的 GitHub Enterprise Cloud 功能概览

从 GitHub Enterprise Server 迁移的数据

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

项目GHES 3.4.1+GHES 3.5.0+
Git 源代码(包括提交历史)
拉取请求
议题
里程碑
Wiki
GitHub Actions 工作流
提交评论
Webhook(迁移后必须重新启用,参见启用 Webhook
分支保护
GitHub Pages 设置
上述数据的用户历史记录
附件(参见附加文件
发布

根据 GHES 版本,对压缩归档的每个仓库适用不同的大小限制。

限制项GHES <3.8.0GHES 3.8.x-3.11.xGHES 3.12.xGHES 3.13.0+
Git 源2GiB10GiB20GiB40GiB(公开预览)
元数据2GiB10GiB20GiB40GiB(公开预览)

未迁移的数据

目前,以下数据不会被迁移。

  • 审计日志
  • 代码扫描结果
  • Codespaces 机密
  • 提交状态检查
  • Dependabot 警报
  • Dependabot 机密
  • 仓库级别的讨论
  • 议题评论和拉取请求评论的编辑历史
  • 仓库之间的 Fork 关系(参见关于 Fork
  • GitHub Actions 机密、变量、环境、自托管运行器、更大的运行器、工作流产物或工作流运行历史
  • GitHub 应用及其安装
  • Git LFS 对象和大二进制文件(仍支持使用 Git LFS 的仓库,参见GitHub Enterprise Importer 的限制
  • 从提交指向已使用 rebase 合并的拉取请求的链接
  • 在拉取请求、议题、发布和评论正文中提及的用户、团队和组织(保留最初提及的用户名)
  • GitHub Packages 中的包
  • 项目(新版项目体验)
  • 不同仓库之间的拉取请求和议题的引用(参见自动链接引用和 URL
  • 机密扫描结果的修复状态
  • 用户账户拥有的仓库
  • 仓库活动订阅
  • 仓库属性
  • 仓库星标
  • 仓库关注者
  • 规则集
  • 子议题(参见关于议题
  • 标签保护规则
  • 用户对仓库的访问权限
  • 用户的个人资料、SSH 密钥、签名密钥或个人访问令牌
  • Webhook 机密
  • Teams
  • 用户或团队对仓库的访问权限
  • 拉取请求的仓库设置

分支保护

分支保护对特定分支名称或分支名称模式应用一套指定规则。更多信息,请参见关于受保护分支

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

  • 允许特定角色绕过强制拉取请求
  • 要求对最近的推送进行批准
  • 要求部署成功后才能合并
  • 锁定分支
  • 限制创建匹配分支的推送
  • 允许强制推送

以下限制同样适用

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

从 GitHub.com 迁移的数据

如果您的迁移来源是 GitHub.com 上的账户,您可以在组织之间迁移单个仓库,或在企业之间迁移整个组织。

组织迁移的数据

当您迁移组织时,会在目标企业账户内创建一个新组织。随后,以下数据会迁移到新组织。

  • Teams
  • 仓库
  • 团队对仓库的访问权限
  • 成员权限
  • 组织级别的 Webhook(迁移后必须重新启用,参见启用 Webhook
  • 组织内新建仓库的默认分支名称

所有仓库均以私有可见性迁移。若想将仓库的可见性设为公开或内部,可在迁移后通过 UI 或 API 进行更改。

团队成员关系不会迁移。迁移后,您需要为迁移的团队添加成员。更多信息,请参见GitHub 产品之间迁移概览

注意

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

仓库迁移的数据

当您迁移仓库时,无论是直接迁移还是组织迁移的一部分,仅以下数据会被迁移。

  • Git 源代码(包括提交历史)
  • 拉取请求
  • 议题
  • 里程碑
  • Wiki(不包括附件)
  • GitHub Actions 工作流
  • 提交评论
  • 活动的 Webhook(迁移后必须重新启用,参见启用 Webhook
  • 仓库话题
  • 仓库设置
    • 分支保护(更多细节请参见分支保护
    • GitHub Pages 设置
    • 自动链接引用
    • 拉取请求设置
      • 自动删除源分支
      • 允许自动合并
      • 允许合并提交(提交信息设置重置为默认信息)
      • 允许 squash 合并(提交信息设置重置为默认信息)
      • 允许 rebase 合并
  • 发布(每个仓库最高 10 GiB)
  • 上述数据的用户历史记录
  • 附件(参见附加文件

未迁移的数据

目前,以下数据不会被迁移。

  • 审计日志
  • 代码扫描结果
  • Codespaces 机密
  • 提交状态检查
  • Dependabot 警报
  • Dependabot 机密
  • 仓库级别的讨论
  • 议题评论和拉取请求评论的编辑历史
  • 仓库之间的 Fork 关系(参见关于 Fork
  • GitHub Actions 机密、变量、环境、自托管运行器、更大的运行器、工作流产物或工作流运行历史
  • GitHub 应用及其安装
  • Git LFS 对象和大二进制文件(仍支持使用 Git LFS 的仓库,参见GitHub Enterprise Importer 的限制
  • 从提交指向已使用 rebase 合并的拉取请求的链接
  • 在拉取请求、议题、发布和评论正文中提及的用户、团队和组织(保留最初提及的用户名)
  • GitHub Packages 中的包
  • 项目(新版项目体验)
  • 不同仓库之间的拉取请求和议题的引用(参见自动链接引用和 URL
  • 机密扫描结果的修复状态
  • 用户账户拥有的仓库
  • 仓库活动订阅
  • 仓库属性
  • 仓库星标
  • 仓库关注者
  • 规则集
  • 子议题(参见关于议题
  • 标签保护规则
  • 用户对仓库的访问权限
  • 用户的个人资料、SSH 密钥、签名密钥或个人访问令牌
  • Webhook 机密

直接迁移仓库时,团队及其对仓库的访问权限不会被迁移。

分支保护

分支保护对特定分支名称或分支名称模式应用一套指定规则。更多信息,请参见关于受保护分支

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

  • 允许特定角色绕过强制拉取请求
  • 要求对最近的推送进行批准
  • 要求部署成功后才能合并
  • 锁定分支
  • 限制创建匹配分支的推送
  • 允许强制推送

以下限制同样适用

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

迁移数据的限制

GitHub Enterprise Importer 能迁移的内容存在一定限制。部分限制来源于 GitHub 本身,另一些则是 GitHub Enterprise Importer 本身的限制。

GitHub 的限制

  • 单个 Git 提交的 2 GiB 大小限制: 您的 Git 仓库中没有单个提交可以大于 2 GiB。如果有提交超过 2 GiB,您需要将其拆分为每个不超过 2 GiB 的更小提交。
  • Git 引用的 255 字节限制:任何单个Git 引用(通常称为 “ref”)的名称不能超过 255 字节。通常这意味着引用名不能超过 255 个字符,但任何非ASCII字符(如表情符号)可能占用多个字节。如果您的 Git 引用过长,我们将返回明确的错误信息。
  • 100 MiB 文件大小限制:迁移完成后,Git 仓库中的单个文件不能超过 100 MiB。迁移期间,此限制会提升至 400 MiB。请考虑使用 Git LFS 存储大文件。详情请参见管理大文件

GitHub Enterprise Importer 的限制

  • Git 仓库 40 GiB 大小限制(公开预览):此限制仅适用于源代码。若要检查仓库压缩包是否超限,请使用 git-sizer 工具并查看输出中的总 Blob 大小。git-sizer 还能帮助识别大文件、Blob 大小、提交大小和树计数等可能影响迁移的问题。
  • 元数据 40 GiB 限制(公开预览):Importer 无法迁移元数据超过 40 GiB 的仓库。元数据包括议题、拉取请求、发布和附件。在大多数情况下,大量元数据是由发布中附带的二进制资产导致的。您可以使用 migrate-repo 命令的 --skip-releases 标志在迁移时排除发布,随后手动迁移发布。
  • 400 MiB 文件大小限制:使用 GitHub Enterprise Importer 迁移仓库时,Git 仓库中的单个文件不能超过 400 MiB。请考虑使用 Git LFS 存储大文件。详情请参见管理大文件
  • Git LFS 对象未迁移:Importer 可以迁移使用 Git LFS 的仓库,但 LFS 对象本身不会迁移。它们可以在迁移完成后作为后续任务推送到目标。更多信息请参见复制仓库
  • 需要后续任务:在 GitHub 产品之间迁移时,某些设置不会迁移,必须在新仓库中重新配置。有关每次迁移后需完成的后续任务列表,请参见GitHub 产品之间迁移概览
  • 代码搜索功能延迟: 在仓库迁移后,重新索引搜索索引可能需要数小时,在重新索引完成之前,代码搜索可能返回意外结果。
  • 为组织配置的规则集可能导致迁移失败:例如,如果您配置了一个规则,要求提交作者的电子邮件地址必须以 @monalisa.cat 结尾,而您迁移的仓库包含不符合此规则的提交,则迁移会失败。有关规则集的更多信息,请参见关于规则集
  • Mannequin 内容可能无法被搜索:Mannequin 是占位用户,用于关联导入的内容(如议题、拉取请求、评论等)。当您搜索与 mannequin 关联的内容,例如分配的议题时,可能找不到这些议题。一旦 mannequin 被重新认领,内容应能通过新拥有者被检索到。更多信息请参见为 GitHub Enterprise Importer 重新认领 mannequin

入门指南

在 GitHub 产品之间迁移之前,您应规划迁移的执行方式。在迁移任何数据之前,需要指定人员负责迁移并为其授予源和目标两侧的必要访问权限。我们也建议先进行一次试运行迁移。

欲了解从头到尾的迁移流程概览,请参见GitHub 产品之间迁移概览

© . This site is unofficial and not affiliated with GitHub, Inc.