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 阅读(3017) 评论(0) 编辑 收藏 举报