push mirroring

简介:

  • 推送镜像是一个下游存储库,用于镜像对上游存储库所做的提交。
  • 推送镜像被动接收对上游存储库所做的提交的副本。
  • 为防止镜像与上游存储库分流,请勿将提交直接推送到下游镜像。改为将提交推送到上游存储库。

配置推送镜像

基于https的方式

step1: 选择被推送的仓库所在的项目

如果需要通过某个用户来完成镜像推送,需要在协议后加上被推送仓库的username@,如https://renliting@docker.bdeet.top/test/aaa.git,对应的密码就是renliting用户的密码。改用户的权限至少是maintainer权限。

step2: 选择需要推送的仓库所在的项目:

Main menu → ProjectsSettings > RepositoryMirroring repositories → input Git repository URL-Mirror direction(Push)-Authentication method(Password)-Mirror repository

然后点击同步即可。

基于ssh方式

step1: 选择被推送的仓库所在的项目

ssh的方式是将被推送的仓库的clone地址复制过来,然后需要url地址中的:改为/。如将git@docker.bdeet.top:mirror/ccc.git改为git@docker.bdeet.top/mirror/ccc.git

step2: 选择需要推送的仓库所在的项目

Main menu → ProjectsSettings > RepositoryMirroring repositories → input Git repository URL-Mirror direction(Push)-Authentication method(SSH)-Mirror repository

step3: 在上一步的基础上查看ssh公钥并拷贝(一定要拷贝配置好后的镜像推送下的ssh公钥,位于同步按钮的旁边)

step4: 选择被推送的仓库所在的项目

Main menu → ProjectsSettings > RepositoryMirroring repositoriesDeploy keys

然后创建已启用的部署密钥,填写标题,将上面的ssh公钥粘贴进去。

step5: 选择需要推送的仓库所在的项目

点击同步

step6: 查看

可以发现,推送后两边的提交次数一致,说明推送成功。

在采用http的方式推送同步代码的时候遇到了用户权限的问题,向您请教一下。
背景:上游存储库是gitlabA,下游镜像仓库是gitlabB; 为了防止用户误推送到gitlab B,因此对gitlab B做了分支保护,只允许维护者进行push;Gitlab A到gitlab B用的是管理员账户r(gitlab A和gitlab B都有owner)权限进行数据同步;
用户甲 在 gitlab A 是owner权限, 在gitlab B是开发者权限,他的在gitlab A提交代码之后,可以自动同步到gitlab B;
用户乙是gitlab A是开发者权限,但是提交代码到gitlab A之后,发现无法同步到gitlab B, 在同步出错的位置看到错误提示“you are not allowed to force push code to a protected branch on this project”

我的理解是gitlab A和gitlab B之间数据同步应该是通过管理员账号进行的,为啥会报错呢