Gerrit:推动代码审查已经在Gerrit

时间:2016-09-01 15:44:22

标签: git gerrit

我的工作场所开始使用Gerrit管理我们的所有项目。我之前从未使用过Gerrit。我试图找出一个很好的工作流程,用它来提交代码以供审核。

我创建了一个分支foo。我做了一个提交,然后把它推给了Gerrit。然后我从bar开始创建了一个分支foo,并对其进行了另一次提交。我也将分支bar推送到Gerrit。

我现在在分行bar

$ git branch
* bar
foo

现在,我想开始对barfoo的合并进行代码审核。我被告知这个命令应该这样做:

$ 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上的代码审查代码,即使代码在不同的分支上。

看起来如果我避免将分支bar推送到Gerrit,我的问题就会消失,代码审查也会起作用。 但我更愿意能够推动%& @#我想要的任何内容而不会干扰代码审查。我喜欢推动分支机构。我喜欢在Gerrit上设置分支机构,因为我可以将它们发送给其他人在Web界面上查看。

是否有可能在Gerrit工作中进行代码审查而不禁止我将我的分支机构推向Gerrit?

3 个答案:

答案 0 :(得分:0)

Gerrit不允许您使用相同的change-id两次推送相同的提交。这有两个选择:

  1. 修改现有提交以更改change-id
  2. 创建一个具有不同change-id的新提交,并包含来自branch foo的所有更改。
  3. 无论哪种方式,您都必须在选项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