一、问题描述
最近几次直接对gitlab仓库进行代码提交,导致gerrit一直没有能够被同步最新的代码。我前后有试过两个办法,最后才算成功,特此记录下来前后的解决过程,可能对同样遇到该问题的同事有所帮助。
二、思路与步骤
把gitlab代码拷贝过来,重新提交至gerrit,如果没有提交.git文件,将会丢失提交记录。
1、gitlab代码是最新的,在代码工程中,将远程仓库地址修改为gerrit地址。
git remote set-url origin ssh://xxx@192.168.5.169:29418/service/xxx-service\
2.1、提交代码
git push origin master:refs/for/master
提示
2.2、强制提交到gerrit的master分支,第一次我写错了分支,造成了新建了一个分支“orgin/master”。
git push --force origin master:orgin/master
发现提交成功,但是分支却多了"orgin/"。
企业微信截图_495cc604-c733-4f57-89fc-a30b63bcd9bc.png
2.3、需要开放限制:提交到master分支的保护权限
git push --force origin master:master
否则会报错提示如下:
xxx-service git:(master) git push --force origin master:master
Total 0 (delta 0), reused 0 (delta 0)
remote: error: branch refs/heads/master:
remote: You need 'Push' rights with 'Force' flag set to do a non-fastforward push.
remote: User: xxxxxxx
remote: Contact an administrator to fix the permissions
remote: Processing changes: refs: 1, done
To ssh://192.168.5.169:29418/service/xxx-service
! [remote rejected] master -> master (prohibited by Gerrit: not permitted: force update)
error: failed to push some refs to 'ssh://xxxxxxx@192.168.5.169:29418/service/xxx-service'
三、注意问题
1、想要让新的gitlab和旧的gerrit代码保持同步,必须要把gitlab的git提交记录二次提交到gerrit才行。
2、我第一次尝试过,只把gitlab的代码重新提交到gerrit,虽然代码是能提交上去,但是在submit的时候,无法将gerrit代码同步至gitlab。注意:一定要加上.git文件,也即git提交记录。
3、需要在提交至gerrit的时候,加上--force参数,否则它会提示你缺少Change-Id。
missing Change-Id in message footer
然后当你往手动创建Change-Id的方向去解决问题的时候,就越跑越偏了!!
git commit --amend
## 不要走这条路~~
4、验证代码是否为最新。提示你:no new changes,已经是最新的代码了!!
➜ xxx-service git:(master) git push origin HEAD:refs/for/master
Total 0 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://192.168.5.169:29418/service/xxx-service
! [remote rejected] HEAD -> refs/for/master (no new changes)
error: failed to push some refs to 'ssh://xxxxxxx@192.168.5.169:29418/service/xxx-service'
网友评论