在 Gitlab 实例之间创建仓库镜像

问题简述

主机 A 有自己的内网服务,用的是 Gitlab Premium。主机 B 也有自己的内网服务,用的是 Gitlab 极狐(而且是免费版)。目前仓库是在 B 上的,需要在 A 上创建镜像仓库。

分析

由于主机 A 是付费服务支持功能更多,所以我选择由主机 A 主动拉取(Pull) B 的仓库。

过程

首先在 A 上面创建空仓库,然后点进去选择 Settings > Repository > Mirroring repositories,在下面填入仓库的 URL。我们的主机 B 只把 http 端口映射出来了,也没有映射出来 ssh 端口,所以不能使用公钥验证,而只能选择密码验证,URL 的协议也只能是 http(我们仓库没做 https)。

注意以下几点(这三个坑我都踩过):

  1. 这里的 URL 要加上用户名,这样才知道用什么样的身份登录。就像 Gitlab 提示板块里面写的 https://username@gitlab.company.com/group/project.git 这种样式。
  2. 用户名后面不要加 :password 这样的密码形式,这样会出现 HTTP 状态码 301。
  3. 密码必须得是真正的登录密码,不能是在 Gitlab 仓库中申请的 access token。

然后根据具体需求选择是否只同步保护分支、是否触发 CI 等等即可。