【发布时间】:2016-09-01 15:44:22
【问题描述】:
我的工作场所开始使用 Gerrit 来管理我们所有的项目。我以前从未使用过 Gerrit。我正在尝试找出一个很好的工作流程来使用它来提交代码以供审查。
我创建了一个分支foo。我对它做了一个承诺,然后把它推送给了 Gerrit。然后我从foo 开始了一个分支bar,并对其进行了另一个提交。我也将分支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 上的代码审查代码,即使该代码在不同的分支上。
看起来如果我避免将分支 bar 推送给 Gerrit,我的问题就会消失,代码审查也会起作用。 但我希望能够推送任何我想要的 %&@# 而不会干扰代码审查。我喜欢推送分支。我喜欢在 Gerrit 上拥有我的分支机构,因为这样我也可以将它们发送给其他人以在 Web 界面上查看。
是否可以在不禁止我将分支推送到 Gerrit 的情况下在 Gerrit 中进行代码审查?
【问题讨论】:
-
我想到的一种解决方法是修改您的提交,删除更改 ID(以便您的挂钩创建一个新的)并再次尝试推送。让我知道这是否有效
-
@Dunno 感谢您的创意,但我正在寻找一个好的工作流程,而这种解决方法对我来说太老套了。 (如果找不到更好的解决方案,我宁愿使用单独的遥控器。)
-
问题是,gerrit 的 change-id 基本上就是 git 的提交 id。一旦你推送了一个带有一个更改 ID 的提交,除非它被更改,否则你不能再次推送它。我怀疑有一个非hacky的解决方案,但我会尝试找到一个。顺便说一句,我的解决方法有效,我自己检查了一下。
-
@Dunno 是对的,解决方案不是一个 hacky 解决方法,这是关于 Gerrit 过程:您不能使用相同的 Change-Id 进行 2 个不同的更改。您只需要更改 Change-Id。
-
据我所知,您必须修改合并提交以使 git 添加新的更改 ID。 gerrit 钩子的默认行为是不向 git 合并添加更改 ID。如果我理解得很好,您的合并提交尚未推送到 gerrit,但您想要吗?您是否可以将
barrebasefoo而不是合并?如果是,我会在答案中解释。