从 Bitbucket Server 导入您的项目
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
将您的项目从 Bitbucket Server 导入到 GitLab。
估算导入时间
每个从 Bitbucket Server 的导入都不同,这会影响您执行的导入时间。然而,为了帮助您估算导入时间,包含以下数据的项目可能需要 8 小时才能完成导入:
- 13,000 个拉取请求
- 10,000 个分支
- 7,000 个标签
- 500 GiB 的仓库
先决条件
- 必须启用 Bitbucket Server 导入源。如果未启用,请联系您的 GitLab 管理员启用它。在 GitLab.com 上,Bitbucket Server 导入源默认启用。
- 在要导入的目标组中至少拥有 Maintainer 角色。
- 具有管理员访问权限的 Bitbucket Server 认证令牌。如果没有管理员权限,某些数据将不会 被导入。
导入仓库
要导入您的 Bitbucket 仓库:
- 登录 GitLab。
- 在左侧边栏顶部,选择 新建 ( ) 和 新建项目/仓库。
- 选择 导入项目。
- 选择 Bitbucket Server。
- 登录 Bitbucket 并授予 GitLab 访问您的 Bitbucket 账户的权限。
- 选择要导入的项目,或导入所有项目。您可以按名称过滤项目,并选择导入每个项目的命名空间。
- 要导入项目:
- 首次导入:选择 导入。
- 再次导入:选择 重新导入。指定新名称并再次选择 重新导入。重新导入会创建源项目的新副本。
已导入的项目
- 仓库描述
- Git 仓库数据
- 拉取请求,包括评论、用户提及、审查者和合并事件
- LFS 对象
导入时:
- 仓库的公开访问权限会被保留。如果仓库在 Bitbucket 中是私有的,在 GitLab 中也会创建为私有仓库。
- 导入的合并请求和评论在 GitLab 中会有 已导入 标记。
当导入已关闭或已合并的拉取请求时,会从 Bitbucket 服务器获取仓库中不存在的提交 SHA,以确保拉取请求有相关的提交:
- 源提交 SHA 以
refs/merge-requests/<iid>/head格式的引用保存。 - 目标提交 SHA 以
refs/keep-around/<SHA>格式的引用保存。
如果源提交在仓库中不存在,则使用提交消息中包含 SHA 的提交。
未导入的项目
以下项目不会被导入:
- Markdown 中的附件
- 任务列表
- 表情符号反应
- 拉取请求批准
- 拉取请求的批准规则
已导入但已更改的项目
以下项目在导入时会发生变化:
- GitLab 不允许在任意代码行上添加评论。任何超出范围的 Bitbucket 评论都会作为合并请求中的评论插入。
- 多级线程被折叠为一个线程,引用作为原始评论的一部分添加。
- 项目过滤不支持模糊搜索。仅支持 以…开头 或 完全匹配 的字符串。
用户贡献和成员映射
Bitbucket Server 导入器使用一种 改进的方法 来映射 GitLab.com 和 GitLab 自托管上的用户贡献。
用户贡献映射的旧方法
您可以对 GitLab 自托管和 GitLab 专用实例使用旧的用户贡献映射方法。要使用此方法,必须禁用 bitbucket_server_user_mapping。对于 GitLab.com 的导入,您必须使用 改进的方法。
使用旧方法时,导入器尝试将 Bitbucket Server 用户的电子邮件地址与 GitLab 用户数据库中已确认的电子邮件地址匹配。如果找不到这样的用户:
- 使用项目创建者代替。导入器会在评论中添加注释以标记原始创建者。
- 对于拉取请求审查者,不会分配审查者。
- 对于拉取请求批准者,不会添加批准。
拉取请求描述和注释中的 @mentions 通过使用用户的电子邮件地址与 Bitbucket Server 上的用户配置文件匹配。如果在 GitLab 上找不到具有相同电子邮件地址的用户,则 @mention 将变为静态。要匹配用户,他们必须拥有至少提供项目读取访问权限的 GitLab 角色。
如果项目是公开的,GitLab 只匹配被邀请到项目的用户。
导入器会创建任何不存在的命名空间(组)。如果命名空间已被占用,则仓库将在启动导入过程的用户的命名空间下导入。
故障排除
常规问题
如果基于 GUI 的导入工具不起作用,您可以尝试:
- 使用 GitLab Import API Bitbucket Server 端点。
- 设置 仓库镜像。 它提供详细的错误输出。
有关 Bitbucket Cloud 的 故障排除部分,请参阅。
LFS 对象未导入
如果项目导入完成但无法下载或克隆 LFS 对象,您可能使用了包含特殊字符的密码或个人访问令牌。有关更多信息,请参阅 此问题。
由于无效/无法解析的主机地址或导入 URL 被阻止导致导入失败
如果项目导入失败并显示错误消息,例如 导入项目失败:导入 URL 被阻止,尽管最初连接到 Bitbucket 服务器成功,但 Bitbucket 服务器或反向代理可能配置不正确。
要解决此问题,请使用 Projects API 检查新创建的项目并定位项目的 import_url 值。
此值表示 Bitbucket 服务器提供的用于导入的 URL。如果此 URL 无法公开解析,您可能会收到无法解析地址的错误。
要解决此问题,请确保 Bitbucket 服务器知道任何代理服务器,因为代理服务器可能会影响 Bitbucket 构造和使用 URL 的方式。有关更多信息,请参阅 代理和安全 Bitbucket。