Gerrit了解

转自:http://www.uml.org.cn/codeNorms/201901033.asp

1.介绍

Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控制,以及一个用来做Code Review,是Web前台页面。 

2.工作流程 

Gerrit相对Git提供了一个特有的命名空间“refs/for/”用来定义我们的提交上传到哪个branch,且可以用来区分我们的commit是提交到Gerrit进行审核还是直接提交到Git仓库,格式如下:refs/for/<target-branch> ,Push一个Commit到Gerrit:

$ git commit
$ git push origin HEAD:refs/for/master

默认不允许直接Push一个commit到Git仓库:

$ git commit
$ git push origin HEAD:master

3.概念

3.1 Change

一个Change包含一个Change-Id,Change-Id是一串SHA-1字符串。这个Id就是通过我们拉取代码库的时候所拷贝的hooks(hooks/commit-msg)自动生成的。

包含一个或多个Patch Set,以及Owner,Project,Target branch, Comments等信息。

在一个project的每个branch中Change Id是唯一的。(?什么意思?)

3.2 Patch Set

一个Patch Set就是一次commit,Gerrit会将其生成一个Branch暂存。Change中的每提交一个Patch Set表示这个Change的一个新的版本,自动覆盖前一个Patch Set, 默认情况下,仅最后一个Patch Set是有意义的。Code Review通过时,也仅仅是最后一个Patch Set会合并到指定的branch中。

个人Git工作原则一

** 永远是基于远程库的最新代码工作,尽量每一步操作(特别是add/commit/push)都通过git pull --rebase获取一下当前最新版本。**

根据以上原则,建议在将本地commit push到Gerrit之后,立马reset掉,或者重新切换一个新的分支工作。(还是重新切换一个分支工作吧,直接reset风险较大,万一代码不合格倍打回来呢。)

上传一个新的patch set:

当我们的commit被reviewer打回来时,我们可能需要修改并重新提交。可以重新切换回包含此commit的分支,在此代码基础上进行修改,重新add,amend commit:

// rework the change
$ git add <path-of-reworked-file>
...

// amend commit
$ git commit --amend

// push patch set
$ git push origin HEAD:refs/for/master

个人Git工作原则二

** 尽可能保证每一个Change的完整性以及独立性,且越小越好。**

 

posted @ 2022-08-25 23:42  lypbendlf  阅读(363)  评论(0编辑  收藏  举报