gerrit refs相关的一些小研究

gerrit 作为 code review使用不算难,然鹅,总有一些内容知其然不知其所以然,这里稍作研究和记录。

1. refs/for 和 refs/heads

向gerrit服务器提交代码命令:

$git push origin HEAD:refs/for/mybranch

refs/for/mybranch需要经过code review之后才可以提交;

refs/heads/mybranch不需要code review。

2.refs/for 和 refs/changes

   向refs/for/命名空间下推送提交并不会在其中创建引用,而是为新的提交分配一个ID,称为review-id,并为该review-id的访问建立如下格式的引用refs/changes/nn//m,其中: 

    review-id是 Gerrit为评审任务顺序而分配的全局唯一的号码。

    nn为review-id的后两位数,位数不足用零补齐。即nn为review-id除以100的余数。

    m为修订号,该review-id的首次提交修订号为1,如果该修订被打回,重新提交修订号会自增。

 Gerrit server上的project 下的refs目录内容:

$ ls refs/

changes  heads  meta  notes  tags  users

$ ls refs/changes/

02  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20  21  22  23  60

查看review-id

$ cat refs/changes/02/2/1 

a29ef399448a1f762506964a52ef5bff7012c39c

这里review-id为2,其nn为后两位数,因为不足用0补齐,所以为02,修订号m为1

$ cat  refs/changes/60/60/

28bf746fe8a4e2c2d03380ffa111a42dc4959b2e

 这里review-id为60,其nn为后两位数,无需补齐,所以为60,修订号m为1


其中a29ef399448a1f762506964a52ef5bff7012c39c为已经 abandoned提交,28bf746fe8a4e2c2d03380ffa111a42dc4959b2e为最近一次提交,在网页上都可以查到。

3.refs/tags

这个是打tag用的,当然提交tag之前需要给用户组配置tag权限,啰嗦两句:

1)如果需要推送轻量级标签(不带注释), refs/tags/*命名空间赋予Create Reference权限轻量级标签就像Git中的分支一样

2)如果需要删除或者重写标签refs/tags/*命名空间赋予带force选项的Push权限,删除标签需要和删除分支一样的权限;

3)标签的email一定会与提交者的邮箱进行验证,如果推送其他人的标签需要同时赋予Push Annotated Tag和Forge Committer Identity权限.

来个小栗子:

添加一个tag

$ git tag -a v0.1 -m "0.1版本" //添加一个带注释的tag

$ git tag             //查看tag

v0.1

$ git push  origin --tags     //将tag提交到远程

$ git show v0.1      //查看tag 信息

tag v0.1

Tagger: wang_chunai 

Date:   Mon Jun 19 10:28:50 2017 +0800

 

0.1版本

 服务器上和本地的tag目录下查看commit信息,信息相同

服务器上:
$ cat refs/tags/v0.1
ef64aed96a0a6cfa2bf9d6dcf01de3fee7d5c312
本地仓库:
$ cat .git/refs/tags/v0.1
ef64aed96a0a6cfa2bf9d6dcf01de3fee7d5c312

本地查看远程commit

$ git ls-remote origin

28bf746fe8a4e2c2d03380ffa111a42dc4959b2e        HEAD

a29ef399448a1f762506964a52ef5bff7012c39c        refs/changes/02/2/1

33e87492a8b6bd6733ddbff033dc7cba7277f05a        refs/changes/05/5/1

42aa02e8b390433ae6e905a23128c7c0f3037d9c        refs/changes/06/6/1

ffdbec854e3aa03e9b1144e5832e5f9258f40e05        refs/changes/07/7/1

a84cada069126991a2dacdce8b60de5c029152e2        refs/changes/08/8/1

3e006bdbf60075b8bb2cacb8f46521d0593c9025        refs/changes/09/9/1

7740f34e71ccee8ffe3bc1a56a9301c42c19f80e        refs/changes/10/10/1

47b1bda1c00c8ec0280932efc54096f3a11abeb4        refs/changes/11/11/1

4e4f5e0482c85f46f4a2c6fa4083da26c4b6e571        refs/changes/12/12/1

96a42295059c685bf710bf6fc8e28757fe22b79b        refs/changes/13/13/1

bf06e38e5b0fc2ceaa3ed5a9b3ac8f64a0e78605        refs/changes/14/14/1

59039ea9c6b1223e0b85162ccaa5deb43fe55ce9        refs/changes/15/15/1

14c7051a6eb2b0a670450840191569f0582b374b        refs/changes/16/16/1

64593454f9fd8450c753abc69ffb8268b3c429b7        refs/changes/16/16/2

55e00044539447ed2cb15a50ee92ef054399cbdc        refs/changes/17/17/1

8b0493c94694bf96b944dc95c86201e91129bd97        refs/changes/18/18/1

c8614cad9950244bdfd29f75a3a47dffadbf0709        refs/changes/19/19/1

f443a551b184bc80fc6c45cd6a2edaf4ad042297        refs/changes/20/20/1

cdc97ca1984ca26ab3e99123818612aa72c669a1        refs/changes/21/21/1

7cb096695faed2dfdf7a00366c06f6cc4b2ef690        refs/changes/22/22/1

c31f1afaed312d8c13868823558b5f15aad7f816        refs/changes/23/23/1

28bf746fe8a4e2c2d03380ffa111a42dc4959b2e        refs/changes/60/60/1

28bf746fe8a4e2c2d03380ffa111a42dc4959b2e        refs/heads/dev

33e87492a8b6bd6733ddbff033dc7cba7277f05a        refs/heads/master

7740f34e71ccee8ffe3bc1a56a9301c42c19f80e        refs/heads/release

cdb225b3f3c7f23e2b9cf2f81e19e941ea53ad41        refs/notes/review

ef64aed96a0a6cfa2bf9d6dcf01de3fee7d5c312        refs/tags/v0.1

c31f1afaed312d8c13868823558b5f15aad7f816        refs/tags/v0.1^{}

从最后两条记录可以看出,tag v0.1的commit 为ef64aed96a0a6cfa2bf9d6dcf01de3fee7d5c312       ,是基于commitc31f1afaed312d8c13868823558b5f15aad7f816    上所打的tag


你可能感兴趣的:(CI,研究)