跳到文章

Gerrit 工作流

参考自 https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.3/intro-user.html

Gerrit 用于代码 review,本地不必装插件,git 命令可以原生支持,就比如创建一个 Merge Request

git push origin localmaster:refs/for/originmaster

就可以直接创建一个请求,后续的修改使用git commit --amend合到同一个commit里,保证这个commit里的change-id不变即可,会以patch set的形式叠加,这样请求页的流水线记录会越来越长。 (change-id 是根据 .git/hooks/commit-msg 生成的一个hash值)

而gerrit提倡把代码准备好才发起合并请求,所以一般使用

git push origin localmaster:refs/drafts/originmaster

会生成一个草稿版的set,它有几个特点:

  • 可以被publish,和普通的set无异
  • 可以被删除,流水线和comment记录也会消失,可以保证页面简洁
  • 默认不会被其他人看到,只有reviewer和自己能看到

如果有多个 commit,Gerrit 会根据 change-id 不同,生成多个 related changes,可以看做一个 chain,它们的 parent commit 成串,一般互相依赖的需求才这么合(是否能指定 squash 合并?)。

合入时候注意 parents commit 是最新的,这样主分支的记录比较干净(这点随意,看个人习惯)

refs/for/xxx 和 refs/drafts/xxx 叫 Gerrit 的 magic branch,推过去可以实现特定功能,还可以带参数。类似的还有 refs/heads/xxx 等效于 xxx,refs/tags/xxx