Skip to main content

了解从 GitLab 迁移到 GitHub

GitHub Enterprise Importer 从 GitLab 自动迁移。

关于从 GitLab 迁移

可用于 GitHub Enterprise Importer 将存储库从 GitLab 迁移到 GitHub Enterprise Cloud (GitHub.com 或 GHE.com) 。

迁移是使用 GL2GH extension of the GitHub CLI迁移 API 的跨平台命令行包装器 GitHub 来执行的。 对于每个存储库,包括 GL2GH extension:

  1. 将 GitLab 项目导出.tar.gz包含 Git 存储库和项目元数据的存档(例如问题、合并请求、标签、里程碑和发布)。
  2. 在本地运行命令的计算机上暂存存档。
  3. 将存档上传到可从中读取的 Blob 存储GitHub(GitHub-owned blob storage或 AWS S3 或Azure Blob 存储中拥有的存储帐户)。
  4. 将存档导入目标组织,将 GitLab 实体转换为其GitHub等效项。

在创建企业帐户 GitHub之前,请确定企业是否会使用 Enterprise Managed Users。 这会影响成员进行身份验证的方式以及管理标识和访问的方式。 请参阅“为 GitHub Enterprise Cloud 选择企业类型”。

支持的 GitLab 版本

可以从 GitLab.com 和自托管 GitLab 实例迁移。

GitHub Enterprise Importer 支持当前维护的 GitLab 版本(非生命周期结束)。 有关维护的版本列表,请参阅 GitLab 文档中 的支持声明 。 旧版本尚未测试或评估。

迁移的数据

当 GitLab 导出存档中存在数据时, GitHub Enterprise Importer 请将以下数据从 GitLab GitHub Enterprise Cloud迁移到 。

  • Git 源(包括提交历史记录)和存储库 Wiki
  • 提交注释
  • Project完全映射的配置,例如默认分支
  • 问题和问题注释,包括问题状态和里程碑事件
    • 线程讨论将迁移为具有原始线程上下文的平面注释
  • 合并请求,这些请求转换为拉取请求,包括:
    • 注释(仅在存在差异数据时迁移为审阅批注,否则为平面问题批注;仅导出中存在最新的差异)
    • 审阅者和审批者
    • 合并请求状态事件
  • 里程碑
  • 时间线事件
  • 表情符号反应
  • 上传(附件)
  • 发布和发布资产
  • Project成员(迁移为模特)

不迁移的数据

不会迁移以下数据。

  • Git LFS 对象:指针文件随 Git 历史记录一起传输,但必须将二进制对象单独推送到迁移目标,作为后续任务。 有关详细信息,请参阅“复制一个仓库”。
  • 存储库策略,包括合并训练、管道入口、所需审批、主题、虚拟形象和镜像
  • 组设置和组成员身份
  • 代码段、发行板、时间跟踪数据和设计管理数据
  • CI/CD 管道和管道计划(.gitlab-ci.yml 没有自动 GitHub Actions 等效项)
  • 漏洞报告
  • GitLab 根本不包含在导出中的数据,例如 Webhook、CI/CD 变量、作业跟踪和项目、子管道历史记录和管道触发器

迁移数据的限制

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

局限性GitHub

  • 单个 Git 提交的 2 GiB 大小限制: Git 存储库中的单个提交不能大于 2 GiB。 如果您的任何提交大于 2 GiB,您需要将该提交拆分为每个 2 GiB 或更小的提交。
  • 单个推送的 2 GiB 大小限制: 单个推送不能大于 2 GiB。 较大的推送失败并出现 pack exceeds maximum allowed size 错误。
  • Git 引用的 255 字节限制: 任何通常称为“ref”的 Git 引用的名称不能大于 255 字节。 通常,这意味着引用长度不能超过 255 个字符,但任何非 ASCII 字符(如表情符号)可能会使用多个字节。 如果任何 Git 引用太长,将返回明确的错误消息。
  • 100 MiB 文件大小限制: 完成迁移后,Git 存储库中的单个文件不能大于 100 MiB。 在存储库迁移期间,此限制将增加到 400 MiB。 请考虑用于 Git LFS 存储大型文件。

局限性GitHub Enterprise Importer

  • Git 存储库的大小限制为 40 GB (公开预览):此限制仅适用于源代码****。 若要检查存储库存档是否超出限制,请使用 git-sizer 工具并查看输出中的 blob 总大小。 git-sizer 工具还有助于识别与大型文件、blob 大小、提交大小和可能影响迁移的树计数相关的潜在问题。
  • 400 MiB 文件大小限制: 迁移包含的 GitHub Enterprise Importer存储库时,Git 存储库中的单个文件不能大于 400 MiB。 请考虑使用 Git LFS 来存储大型文件。
  • **Git LFS对象未迁移:**Importer可以迁移使用Git LFS的存储库,但 LFS 对象本身不会被迁移。 迁移完成后,可以将其作为后续任务推送到迁移目标。
  • 延迟的代码搜索功能:迁移存储库后,重新编制搜索索引可能需要几个小时,在重新编制索引完成前,代码搜索可能会返回意外的结果。
  • 为组织配置的规则集可能会导致迁移失败:例如,如果配置的规则要求提交作者的电子邮件地址以 **** 结尾,而要迁移的存储库包含不符合此规则的提交,则迁移将失败。
  • 模特内容可能不可搜索:模特是与导入内容(如问题、拉取请求、注释等)关联的占位符用户。 在搜索与模型关联的内容(例如已分配的事项)时,可能无法找到这些事项。 回收模特后,即可通过新所有者获取内容。

GitLab 的限制

  • GitLab 导出存档的 40 GB 限制: GitLab 的项目导出 API 不会在 GitLab.com 上生成大于 40 GB 的存档。 GitHub与源大小限制不同,这适用于整个导出存档,包括项目元数据以及 Git 源。 此限制由 GitLab 设置,在自托管实例上可能有所不同。