我的工作场所开始使用Gerrit管理我们的所有项目。我之前从未使用过Gerrit。我试图找出一个很好的工作流程,用它来提交代码以供审核。
我创建了一个分支foo
。我做了一个提交,然后把它推给了Gerrit。然后我从bar
开始创建了一个分支foo
,并对其进行了另一次提交。我也将分支bar
推送到Gerrit。
我现在在分行bar
:
$ git branch
* bar
foo
现在,我想开始对bar
到foo
的合并进行代码审核。我被告知这个命令应该这样做:
$ git push gerrit HEAD:refs/for/foo
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Processing changes: refs: 1, done
To ssh://ram@gerrit/acme/my_project
! [remote rejected] HEAD -> refs/for/foo (no new changes)
error: failed to push some refs to 'ssh://ram@gerrit/acme/my_project'
如您所见,我收到错误(no new changes)
。我问当地的Gerrit冠军为什么,并且他说,据他所知,你不能推动已经在Gerrit上的代码审查代码,即使代码在不同的分支上。/ p>
看起来如果我避免将分支bar
推送到Gerrit,我的问题就会消失,代码审查也会起作用。 但我更愿意能够推动%& @#我想要的任何内容而不会干扰代码审查。我喜欢推动分支机构。我喜欢在Gerrit上设置分支机构,因为我可以将它们发送给其他人在Web界面上查看。
是否有可能在Gerrit工作中进行代码审查而不禁止我将我的分支机构推向Gerrit?
答案 0 :(得分:0)
Gerrit不允许您使用相同的change-id两次推送相同的提交。这有两个选择:
无论哪种方式,您都必须在选项1中使用git commit --amend
或在选项2中使用git rebase foo bar -i
更改提交的更改ID,将所有提交压缩为1,然后更改其消息。< / p>
这实际上是一种合理的行为 - Gerrit是一个代码审查工具,因此将提交直接推送到分支机构是没有意义的。
如果真的需要一个遥控器只是为了向其他人展示您的代码,那么您必须为此目的制作一个新的。
答案 1 :(得分:0)
我认为你需要以不同的方式进行合并
- 首先,在本地合并分支 - git checkout foo
然后git merge origin/bar
- 第二步,将合并提交从本地foo推送到远程foo - git push gerrit HEAD:refs/for/foo
别忘了将 changeId放入合并提交。
一般情况下,无需两次审核提交。您需要查看合并提交或rebase方法。如果您的分支不是特定分支,请考虑使用rebase,例如dev与release
答案 2 :(得分:0)
进行合并时,git不会添加更改ID。您必须修改合并提交以使git添加新的更改ID。
这将允许您推动合并提交。 gerrit hook的默认行为是不向git merge添加change-id。
我建议的另一个解决方案是进行rebase而不是合并。您可以使用git rebase foo
bar
将条形图重新设置为foo