{"meta":{"title":"了解如何从 GitLab 迁移到 GitHub","intro":"GitHub Enterprise Importer 可自动完成从 GitLab 的迁移。","product":"迁移","breadcrumbs":[{"href":"/zh/migrations","title":"迁移"},{"href":"/zh/migrations/using-github-enterprise-importer","title":"GitHub Enterprise Importer"},{"href":"/zh/migrations/using-github-enterprise-importer/migrate-from-gitlab","title":"从 GitLab 迁移"},{"href":"/zh/migrations/using-github-enterprise-importer/migrate-from-gitlab/understand-migrations","title":"1. 了解迁移"}],"documentType":"article"},"body":"# 了解如何从 GitLab 迁移到 GitHub\n\nGitHub Enterprise Importer 可自动完成从 GitLab 的迁移。\n\n## 关于从 GitLab 迁移的说明\n\n可用于 GitHub Enterprise Importer 将存储库从 GitLab 迁移到 GitHub Enterprise Cloud （GitHub.com 或 GHE.com） 。\n\n迁移通过 GL2GH extension of the GitHub CLI 执行，它是对 GitHub 迁移 API 的跨平台命令行包装器。 对于每个存储库，GL2GH extension：\n\n1. 将 GitLab 项目**导出**到`.tar.gz`包含 Git 存储库和项目元数据的存档（例如问题、合并请求、标签、里程碑和发布）。\n2. 在本地运行命令的计算机上**暂存**存档。\n3. **将存档上传**到 GitHub 可从中读取的 Blob 存储（无论是 GitHub-owned blob storage，还是您在 AWS S3 或 Azure Blob 存储 中拥有的存储账户）。\n4. 将存档**导入**目标组织，将 GitLab 实体转换为其GitHub等效项。\n\n在创建企业帐户 GitHub之前，请确定企业是否会使用 Enterprise Managed Users。 这会影响成员进行身份验证的方式以及管理标识和访问的方式。 请参阅“[为 GitHub Enterprise Cloud 选择企业类型](/zh/enterprise-cloud@latest/admin/concepts/enterprise-fundamentals/choose-an-enterprise-type)”。\n\n## 支持的 GitLab 版本\n\n可以从 GitLab.com 和自托管 GitLab 实例迁移。\n\nGitHub Enterprise Importer 支持当前仍在维护的 GitLab 版本（未终止支持）。 有关维护的版本列表，请参阅 GitLab 文档中 [的支持声明](https://docs.gitlab.com/policy/maintenance/) 。 旧版本尚未测试或评估。\n\n## 迁移的数据\n\n当数据存在于 GitLab 导出归档中时，GitHub Enterprise Importer 会将以下数据从 GitLab 迁移到 GitHub Enterprise Cloud。\n\n* Git 源（包括提交历史记录）和存储库 Wiki\n* 提交注释\n* 可清晰映射的项目配置，例如默认分支\n* 问题和问题注释，包括问题状态和里程碑事件\n  * 讨论串将迁移为扁平评论，并保留原始讨论串的上下文\n* 合并请求，这些请求转换为拉取请求，包括：\n  * 评论（仅当存在 diff 数据时才迁移为审查评论，否则迁移为普通议题评论；导出内容中仅包含最新的 diff）\n  * 审阅者和审批者\n  * 合并请求状态事件\n* 里程碑\n* 时间线事件\n* 表情符号反应\n* 上传（附件）\n* 发布和发布资产\n* Project成员（迁移为模特）\n\n## 不迁移的数据\n\n不会迁移以下数据。\n\n* Git LFS 对象：指针文件随 Git 历史记录一起传输，但必须将二进制对象单独推送到迁移目标，作为后续任务。 有关详细信息，请参阅“[复制一个仓库](/zh/repositories/creating-and-managing-repositories/duplicating-a-repository#mirroring-a-repository-that-contains-git-large-file-storage-objects)”。\n* 仓库策略，包括合并队列、流水线门禁、必需批准、主题、头像和镜像\n* 组设置和组成员身份\n* 代码片段、议题看板、时间跟踪数据和设计管理数据\n* CI/CD 流水线和流水线计划（`.gitlab-ci.yml` 没有自动 GitHub Actions 对应项）\n* 漏洞报告\n* GitLab 完全不包含在导出内容中的数据，例如 Webhook、CI/CD 变量、作业日志和构件、子管道历史记录以及管道触发器\n\n## 迁移数据的限制\n\n可以迁移的 GitHub Enterprise Importer 是有限的。 有些是由于GitHub的限制，而另一些是GitHub Enterprise Importer本身的限制。\n\n### 局限性GitHub\n\n* **单个 Git 提交的 2 GiB 大小限制：** Git 存储库中的单个提交不能大于 2 GiB。 如果您的任何提交大于 2 GiB，您需要将该提交拆分为每个 2 GiB 或更小的提交。\n* **单个推送的 2 GiB 大小限制：** 单个推送不能大于 2 GiB。 较大的推送失败并出现 `pack exceeds maximum allowed size` 错误。\n* **Git 引用的 255 字节限制：** 任何通常称为“ref”的 Git 引用的名称不能大于 255 字节。 通常，这意味着引用长度不能超过 255 个字符，但任何非 ASCII 字符（如表情符号）可能会使用多个字节。 如果任何 Git 引用太长，将返回明确的错误消息。\n* **100 MiB 文件大小限制：** 完成迁移后，Git 存储库中的单个文件不能大于 100 MiB。 在存储库迁移期间，此限制将增加到 400 MiB。 请考虑用于 Git LFS 存储大型文件。\n\n### 局限性GitHub Enterprise Importer\n\n* Git 存储库的大小限制为 40 GB (公开预览)：此限制仅适用于源代码\\*\\*\\*\\*。 若要检查存储库存档是否超出限制，请使用 [git-sizer](https://github.com/github/git-sizer) 工具并查看输出中的 blob 总大小。 git-sizer 工具还有助于识别与大型文件、blob 大小、提交大小和可能影响迁移的树计数相关的潜在问题。\n* **400 MiB 文件大小限制：** 迁移包含的 GitHub Enterprise Importer存储库时，Git 存储库中的单个文件不能大于 400 MiB。 请考虑使用 Git LFS 来存储大型文件。\n* \\*\\*Git LFS对象未迁移：\\*\\*Importer可以迁移使用Git LFS的存储库，但 LFS 对象本身不会被迁移。 迁移完成后，可以将其作为后续任务推送到迁移目标。\n* 延迟的代码搜索功能：迁移存储库后，重新编制搜索索引可能需要几个小时，在重新编制索引完成前，代码搜索可能会返回意外的结果。\n* 为组织配置的规则集可能会导致迁移失败：例如，如果配置的规则要求提交作者的电子邮件地址以 \\*\\*\\*\\* 结尾，而要迁移的存储库包含不符合此规则的提交，则迁移将失败。\n* **模特内容可能不可搜索**：模特是与导入内容（如问题、拉取请求、注释等）关联的占位符用户。 在搜索与模型关联的内容（例如已分配的事项）时，可能无法找到这些事项。 回收模特后，即可通过新所有者获取内容。\n\n### GitLab 的限制\n\n* **GitLab 导出存档的 40 GB 限制：** GitLab 的项目导出 API 不会在 GitLab.com 上生成大于 40 GB 的存档。\n  GitHub与源大小限制不同，这适用于整个导出存档，包括项目元数据以及 Git 源。 此限制由 GitLab 设置，在自托管实例上可能有所不同。"}