如何使用Gerrit进行分支审查

时间:2019-01-16 15:49:55

标签: gerrit

我正在选择一个免费的工具来执行代码审查,我在考虑Gerrit。 想法是检查具有多个更改(提交)的分支的代码。如何使用Gerrit进行分支机构审查?目的是在一次Gerrit变更中分析所有分支变更。

谢谢

2 个答案:

答案 0 :(得分:0)

如果您要检查具有多个提交的分支,则Gerrit不适用于该分支。 Gerrit中的审阅在每个提交中单独执行。 Github或Bitbucket是适合分支机构审查的工具。

回答了您的问题,并提出了一个建议:恕我直言,您应该尝试与Gerrit合作,逐一检查每个提交,因为这是一个非常好的工作流程。我真的很喜欢(更喜欢)格里特策略。

答案 1 :(得分:0)

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

...
[alias]
    gerrit = "!git fetch --all && git rebase origin/master $(git symbolic-ref HEAD) &&  \
               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})"

假设:

  • 您已经为主题/修复更改创建了一个分支,并至少提交了一个提交;
  • 你项目中主干分支的名称是master,远程的名称是origin(可以在别名中设置,$(git remote)可以用于更大的灵活性);

用法:git gerrit


其工作原理如下:

git fetch --all && git rebase origin/master $(git symbolic-ref HEAD)

如果有人在此期间更新了 master,因此我们希望在新的 rebase 之上master 我们的提交。 $(git symbolic-ref HEAD) 仅生成我们当前的分支名称(如果 rebase 报告任何内容,我们可以解决冲突并即时提交)。

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,这会将分支指针移回此提交,将以后提交的所有更改保留为 暂存。然后:

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 之前和第一个 {{ 1}}).

优点:

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

尽管如此,我还是建议保留一个经典的远程分支作为备份并同步它。然后代替 reflog git rebase -i 也可以使用 HEAD@{2},这是远程分支的提示(前$(git rev-parse @{u}) 值得添加到别名)。 同样的东西可以用于与同事共享的分支(但我们必须避免重写历史和push)。