如何使用 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
)。
如何使用 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
)。