如何使用 Gerrit 进行分支审查

How to make a branch review with Gerrit

如何使用 gerrit 进行分支审查?我想分析一次 gerrit 更改中的所有分支更改。

想法是审查具有多个更改(提交)的分支的代码。

如果你想审查一个有多个提交的分支,Gerrit 不是一个合适的工具。 Gerrit 中的审查是在每个提交中单独执行的。 Github or Bitbucket 都是适合branch review的工具

回答了你的问题,一个建议:恕我直言,你应该尝试使用 Gerrit,单独审查每个提交,因为这是一个非常好的工作流程。我真的很喜欢(并且更喜欢)Gerrit 策略。

我创建了一个 git 别名,它促进了传统的 git 工作流程(在“工作”分支上进行多次提交)并将它们推送到Gerrit 自动在提交消息中使用相同的 Change-Id。可以添加到.gitconfig file:

...
[alias]
    gerrit = "!git reset --soft $(git rev-list master..HEAD | tail -1) &&  \
               git commit --amend --no-edit &&                             \
              (git push origin HEAD:refs/for/master; git reset HEAD@{2})"

假设:

  • 您已经为您的 topic/fix 更改创建了一个分支,并且至少提交了一个;

用法:git gerrit


其工作原理如下:

git reset --soft $(git rev-list master..HEAD | tail -1)

git rev-list master..HEAD | tail -1 获得我们在分支上创建的第一个提交的 SHA-1(从 master 分叉后),我将其称为“基础”提交。然后我们将 SHA-1 提供给: git reset --soft 将分支指针移回此提交,将以后提交的所有更改保留为 staged.那么:

git commit --amend --no-edit

我们通过单个 --amend 将分阶段更改压缩到基础提交中。原始提交消息将被保留,因此将是 Change-Id.

git push origin HEAD:refs/for/master

这就是一切的重点 - 我们推动 Gerrit...

git reset HEAD@{2}

最后我们利用 reflog 历史恢复了我们分支的原始形状,HEAD@{2} 意味着我们的 HEAD 在两步之前的修改(在 commit --amend 和第一个 reset).

优点:

  • 您在工作分支上维护自己的提交粒度,您可以使用 git rebase -i 根据逻辑顺序和可读性尽可能多地编辑它们(不要修改 Change-Id 来自“基本”提交消息);
  • 同时使用一个命令将最新的更改上传到 Gerrit,使其接受它们作为同一更改的另一个补丁集,而不会向您的更改列表发送垃圾邮件和多个相关更改;

尽管如此,我建议保留经典的 remote 分支作为备份并同步它。然后 reflog HEAD@{2} 也可以 $(git rev-parse @{u}) 工作,这是远程分支的一个提示。 同样的事情可以用于与同事共享的分支(但我们必须避免重写历史和push -f)。