Gerrit使用技巧

一、Gerrit过滤方法

1.查看某个文件已经merge的提交记录

file:autosleep.c status:merged

2.查看某个人已经merge的提交记录

owner:"my_name<my_email>" status:merged,还有branch: file:来查分支和文件的提交记录。

 

二、Gerrit操作

1. repo工程拉单个版本库的方法
$ cat ./repo/projects/android/kernel/configs.git/config
[remote "origin"]
url = ssh://xxxxxxxxxx/kernel/configs
review = http://gerrit.xxxxxxx

$ git clone ssh://xxxxxxxxxx/kernel/configs

2. Gerrit本地提交方法
格式:git push origin HEAD:refs/for/分支名 前提条件是本地也需要处于同一分支中

3. 代码审核失败后,重新提交时必须使用 git commit --amend,否则会生成新的评审任务,无法与上一次审核任务关联。
测试git commit --amend的重新提交的虽然commit hash会变,但是Change-Id是不会变的。

4. 点击左上方的菜单栏Projects->List,就能看到gerrit仓库里面所有的项目,排在最前的两个默认项目All-Projects和 All-Users,这两个工程是两个基础的工程,我们后期新建的所有项目默认都是继承
自ALL-Projects的权限。

5.使用Gerrit拉单个仓库代码的方法

git clone ssh://<your name>@gerrit.codebase.scm.adc.com:29411/sba_patches -b private_LA.UM.8.12_20200924221525
git clone ssh://<your name>@gerrit.scm.adc.com:29411/<project path name> -b <branch name>

其实就是 git rev-parse --git-dir 下 config 下的 url,即 git clone <url> -b <branch>

6. Gerrit上下载的.diff格式的补丁可以直接使用git apply进行打,不需要使用patch命令打补丁。

7. Gerrit提交冲突了,使用 git pull --rebase 后,重新提交。 

8. 只拉单个仓库的代码

git clone ssh://<your_gerrit_name>@<服务器仓库>:29418/<仓库名> -b <分支名>

9. git commit --amend 删除change id后重新提交,会产生新的Gerrit链接

10. 可以随便git cp一笔,然后进行全面更改,然后提交,这样change id是一样的,可以规避一些通过change id进行check的检查项。

11. 只要重新提交(reset后cp)时不要改Change-Id,重新提交生成的Gerrit链接地址就不会变。

12. git commit --amend 删除 Change-Id 后重新提交,会产生新的 Gerrit 链接。

13. 可以随便git cp一笔,然后进行全面更改,然后提交,这样 Change-Id 是一样的,可以规避一些基于 Change-Id 进行check的检查项。

14. 若是cp后改错了,提交了。可以reset到HEAD^然后git cp -n <hash>,修改后再提交,Change-Id不变,基于它的check可以跳过, 然后再git commit提交即可。

 

三、Gerrit 加key

1. 没有key报错如下:

$ git clone ssh://xiaoming@192.168.10.112:29418/perfermance
Cloning into 'perfermance'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

表示没有对 192.168.10.112 这个服务器加 public key。

加 key 方法:

(1) 浏览器打开 http://192.168.10.112:8080,然后在左上角自己名字下面点击 setting --> "SSH Public Keys" --> Add Key。
(2) $ cat ~/.ssh/id_rsa.pub 将打印出来的内容添加到上一步骤的 Add Key 框里,点击add,之后就有权限clone代码了。

其中 29418 是默认的 Gerrit ssh 端口,而 8080 是默认的 Gerrit Web 端口。

注:并不是所有都是 29418 端口,有的是1081端口。

2. 生成key

若是目前还没有 ~/.ssh/id_rsa.pub 文件,就还需要生成key。执行命令:

ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注"

参数    解释
-b    采用长度1024 bit的密钥对,b=bits,最长4096,不过没啥必要。
-t  rsa 采用rsa加密方式, t=type
-f    生成文件名, f=output_keyfiles
-C    备注,C=comment,一般是指定用户的邮箱

更多参数可运行 man ssh-keygen

如 ssh-keygen -t ed25519 -C "<name>@<email>.com"

ssh-keygen -t ed25519 -C <user_email>
# 还需要:
$ git config --global user.name <user_name>
$ git config --global user.email <user_email>

3. 添加key

Gerrit提交是 http://gerrit.foo.local:1081/c/kernel/msm-5.4/+/91866 那么加key的网址就是 http://gerrit.foo.local:1081/settings/ssh-keys 

 

四、Gerrit统计

1. 统计时间内都有谁提交了代码,都提交了多少次

[root@-nj12 CODE]# ssh -p 29418 xiannianli@192.168.0.151 gerrit query   --format=JSON --current-patch-set --no-limit 'after:"2022-06-01" before:"2022-10-01"' | jq '.owner.name' | sort | uniq -c | awk '{print "提交者: " $2 ", 提交次数: " $1}'


2. 统计新增及删除代码行数

[root@-nj12 CODE]# ssh -p 29418 xiannianli@192.168.0.151 gerrit query --format=JSON --current-patch-set --no-limit 'after:"2022-11-01" before:"2022-12-21"' |jq -r '.owner.name as $name | .currentPatchSet.sizeInsertions as $insertions | .currentPatchSet.sizeDeletions as $deletions | "\($name),\($insertions),\($deletions)"' |awk -F',' '{arr[$1]+=1; arr2[$1]+=$2; arr3[$1]+=$3} END{for (i in arr) printf "提交者: %s, 提交次 数: %d, 新增行数: %d, 删除行数: %d\n", i, arr[i], arr2[i], arr3[i]}' |sort

 

五、服务器迁移

1. 服务器间拷贝文件

~/ $ scp -r ham@10.192.79.151:~/.gitconfig  ./  //需要151服务器的密码

2. tree命令显示路由为乱码,在~/.bashrc中添加 alias tree='tree --charset ASCII'

 

 

参考:

如何用gerrit进行代码统计:https://zhuanlan.zhihu.com/p/673253898

 

posted on 2020-03-05 00:48  Hello-World3  阅读(2934)  评论(0编辑  收藏  举报

导航