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)中去。

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

  1. 当进行commit时,必须要生成一个Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒。
  2. 提交者不能直接把代码推到远程的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 工作流程及简单使用相关推荐

  1. 【Gerrit】Gerrit工作流程及使用手册

    gerrit的流程.权限控制其实对于初次接触的同学们来说,确实有点复杂.我希望这篇文章过后,我们能对gerrit的流程有一个大致的了解. 这篇文章将用一个真实的例子,演示一下gerrit的管理员,普通 ...

  2. Gerrit工作流程及使用手册

    gerrit的流程.权限控制其实对于初次接触的同学们来说,确实有点复杂.我希望这篇文章过后,我们能对gerrit的流程有一个大致的了解. 这篇文章将用一个真实的例子,演示一下gerrit的管理员,普通 ...

  3. 浅谈Git的基本工作流程与简单的Git命令

    浅谈Git的基本工作流程与简单的Git命令 什么是GIT? 定义:是一个开源的分布式版本控制工具 功能: 代码备份 版本控制 协同开放 代码追溯 场景: 团队协同开放项目 Git仓库工作流程 Git常 ...

  4. ACR:修片的五阶段工作流程

    Adobe Camera Raw(简称为 ACR )与 Adobe Lightroom Classic(简称为 Lr )使用的是相同的图像处理引擎,随 Ps 一起安装,并可作为 Ps 中的滤镜来使用. ...

  5. ios客户端学习笔记(六):iOS客户端的工作流程

    iOS客户端的工作流程可以简单地概括为: 用户操作 -> 视图显示 -> 交互处理 -> 数据获取 -> 数据处理 -> 数据展示. 结合代码对每个工作流程进行更为具体. ...

  6. 《Adobe After Effects CS4经典教程》——1 工作流程 1.1 开始

    本节书摘来自异步社区<Adobe After Effects CS4经典教程>一书中的第1章,第1.1节,作者 [美]Adobe公司,译者 许伟民,袁鹏飞 ,更多章节内容可以访问云栖社区& ...

  7. NVIDAI和ATI显卡比较,细研GPU工作流程

    目录: 第一章:第二代及以后的GPU工作流程简介 第二章:DirectX8和DirectX9 GPU的传统流水线 第三章:顶点和像素操作指令 第四章:传统GPU指令的执行 第五章:统一渲染架构 第六章 ...

  8. 批处理节省时间_简单的设计工作流程技巧,节省时间和头痛

    批处理节省时间 Does the way you work help you or slow you down? Do you feel efficient in your design workfl ...

  9. 基于SSH开发HR(人力资源管理系统)简单工作流程系统 课程设计 大作业 毕业设计

    基于S2SH开发HR(人力资源管理系统)简单工作流程系统(大作业/毕业设计) 开发环境: Windows操作系统 开发工具:Myeclipse+Jdk+Tomcat+MYSQL数据库 运行效果图: 基 ...

  10. 简单的Spring MVC入门程序,对于Spring mvc工作流程的理解,servlet标签和servlet-mapping 理解,视图解析器

    javaweb SpringMvc的组成:jsp,JavaBean,servlet 可以使用Spring所提供的功能 提供了前端控制器DispatcherServlet,不需要细化Servlet 执行 ...

最新文章

  1. Python3中lambda表达式介绍
  2. 转大神的中国剩余定理
  3. Python爬虫--抓取糗事百科段子
  4. java_io_listFile()的应用和匿名内部类
  5. (四)DOM对象和jQuery对象
  6. java中找不到javax包_logstash 找不到 java 环境
  7. Android开机自动运行APP——BroadcastReceiver
  8. PHP递归实现层级树状展现数据
  9. 烧录软件:mcuisp和FlyMcu下载
  10. 计算机主机前耳机没声音,Win10电脑机箱前面板耳机没声音如何解决【解决方法】...
  11. 爬取汽车之家所有车型,价格,配置
  12. 用CSS添加鼠标样式-箭头、小手、十字 CSS实现虚线之dotted边框-点虚线、dashed边框-破折号虚线
  13. 深度学习分类类别不平衡_Github|类别不平衡学习资源(上)
  14. 对 cplex/gurobi MPS/LP文件格式的理解
  15. Linux网卡配置文件 参数详解
  16. 《人类简史》九、科学革命——承认自己无知的革命
  17. 为什么在游戏开发中我不喜欢用MVC系列模式了
  18. OSChina 周六乱弹 ——请让我的灵魂最后一次燃烧
  19. 创意电子学-第04课:使用欧姆定律
  20. 计算机科学与技术高等数学答案,计算机科学与技术本科-入学测试高等数学测试题(第1套)...

热门文章

  1. javaScript特殊知识点归纳
  2. Worm.Win32.Diskgen.gen/磁碟机也捎带广告?
  3. 贸易进出口管理-报关单管理
  4. 数据库中delete和drop的区别
  5. WIN10安装cad2006提示无权限安装的解决办法
  6. 标准盒子模型简单讲解
  7. 实验室只有1080显卡,老师还想让发深度学习论文怎么办?
  8. 嘴里又苦又干,还有异味
  9. linux 搜狗输入法使用技巧,在Deepin 20系统中使用官方搜狗输入法的技巧
  10. Fluent——UDF监测指定点的物理量