欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Gerrit 工作流程及简单使用

发布时间:2023/12/16 编程问答 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Gerrit 工作流程及简单使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.Gerrit

Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件开发者,可以相互审阅彼此修改后的代码,决定是否能够提交,回退或是继续修改。它使用版本控制系统Git作为底层。[1]

1.1 Gerrit和Gitlab区别

gitlab的特点是一个人维系一个分支。
gerrit的特点是一个团队维系一个分支。

gitlab 可以根据需要创建project,每个团队可以根据自己的需求管理自己的代码,方式更加的灵活。

gerrit比较单一,而且权限配置比较复杂,往往都是要联系管理员做出修改,每个团队很难做到对代码的个性化管理。

代码评审
gitlab是以merge request作为一次review,merge request中可能包含多个 commit,如果review不通过也不需要发起另一次merge request。

gerrit是以commit作为一次review,由于changeId的存在,可以对一次commit反复的进行review。 如果task划分的粒度够细的话,并不会影响各个团队的review习惯。

团队协作
gitlab可以选择公开代码,团队间可以看到互相的代码,有利于团队的协作。
gerrit由于权限控制问题,只能在权限范围内公开代码。

信息共享
gitlab 可以提供issues,wiki等功能方便开发者与使用者之间的沟通,并且gitlab可以无缝的与一些项目管理工具集成,比如:jira。
gerrit 这个方面比较欠缺。
gitlab每个项目都有自己的wiki,很方便查看。

参考:
https://lipeng1667.github.io/2017/01/18/gerrit-guide/
https://blog.csdn.net/bjstyle/article/details/79107086
https://zh.wikipedia.org/wiki/Gerrit

2.工作流程


如果你使用过git,当我们git add --> git commit --> git push 之后,你的代码会被直接提交到repo,也就是代码仓库中,就是图中橘红色箭头指示的那样。

Gerrit流程:
----》程序员写代码
----》push到gerrit服务器
----》审核人员,在web页面进行代码的审核(review),(可以单人审核,也可以邀请其他成员一同审核),
----》审核通过(approve)之后,
----》提交(submit)到代码仓库(repo)中去。

在使用过程中,有两点需要特别注意下:

  • 当进行commit时,必须要生成一个Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒。
  • 提交者不能直接把代码推到远程的master主线(或者其他远程分支)上去。这样就相当于越过了gerrit了。 gerrit必须依赖于一个refs/for/*的分支。
    假如我们远程只有一个master主线,那么只有当你的代码被提交到refs/for/master分支时,gerrit才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。
  • 当审核通过之后,gerrit会自动将这条分支合并到master主线上,然后邮件通知相关成员,master分支有更新,需要的成员再去pull就好了。

    3.使用

    1.用户clone工程

    在命令行执行下面的命令,就可以把test2工程给clone下来了

    $ git clone ssh://test3@192.168.1.100:29418/test2.git

    目录中多了名为test2的文件夹,这个就是我们的工程

    注意:如果从ssh方式clone下来的工程,里面是自带了hooks文件夹的,这个文件夹很重要!!如果不是用ssh://方式克隆下来的,还没有这个文件夹,需要我们自己mkdir

    2.提交

    $ git add test.md $ git commit $ git push

    通过git push命令来推送

    发现推送失败了,提示的错误是:

    You are not allowed to perform this operation [remote rejected] master -> master (prohibited by Gerrit)

    Gerrit拒绝了我们直接提交到master的推送!

    这就是我们在文章开头提到的问题,我们需要push到refs/for/master那条线上!!

    3. push到refs/for/master

    解决:
    在命令行写入下面的命令:

    $ git config remote.origin.push refs/heads/*:refs/for/*

    意思是,当执行push命令时,将会推送到refs/for/当前head所在的分支上。

    重新进行push,结果又报错了。。
    这次的错误是:
    missing Change-Id in commit message footer
    这个是提到的第2个问题,commit一定要有Change-Id

    4. missing Change-Id in commit message footer

    然后我们看到了命令行中给了我们提示,我们可以从hooks文件中拷贝commit-msg文件下来,这样commit时,会自动帮我们生成Change-Id.


    我们可以看一下 git rev-parse --git-dir就是指向的当前git配置的文件,就是.git文件夹
    所以我们直接用scp命令从gerrit服务器上拉取当前用户的hooks文件。

    $ scp -p -P 29418 test3@192.168.1.100:hooks/commit-msg .git/hooks/

    然后我们重新push发现一样的错误,因为我们还停留在上次commit,上次的commit是没有生成Change-Id的!

    我们回退一下,然后重新提交。
    回退命令是先用git log找到上一次的commit id, 然后用

    git reset --hard commitId

    可以看到提交到的分支是refs/for/master

    总结

    以上是生活随笔为你收集整理的Gerrit 工作流程及简单使用的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。