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