当前位置: 首页 > news >正文

Gerrit 使用教程

一、Gerrit简介

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

Gerrit 与 Git 区别

  • Git 是一种版本控制系统;而 Gerrit 是一种基于 Web 的代码审查软件。
  • Git 用于代码的存储和版本控制;Gerrit 用于团队间相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。

理论上Git虽然是一个分布式版本管理系统,不需要中心代码库就能相互同步数据。而在实际的操作过程中,为了方便一个团队的多名开发人员通常需要指定一个确定的代码库用于提交和相互同步代码。所以我们开发团队代码管理一般使用如下结构:

图片


在引入Gerrit代码审核机制后,我们的代码提交和同步的方式发生了变化。

图片

二、工作流程

如果你使用过 git,当我们 git add --> git commit --> git push 之后,你的代码会被直接提交到 repo,也就是代码仓库中。 而 Gerrit 的流程是:

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

android项目的源代码就是使用Gerrit进行管理的,在 Android 项目的网站的代码贡献流程图更为详细的介绍了 Gerrit 代码审核服务器的工作流程。

图片

相信在阅读完上面Gerrit的工作流程图后,大家对Gerrit有个大致的了解,接下来我们将进入实际的操作步骤,细致讲解如何利用Git完成上诉流程。我们已经准备了一个叫Gerrit-Base的测试项目供大家练手。

三、克隆代码仓库

Gerrit仓库提供了HTTP和SSH两种服务供大家从远程服务器获取代码,获取方式可在项目基本信息页面查看。

图片


当然,为个人账户安全,建议选择SSH协议获取代码,使用SSH协议需要配置本机密钥。

$ git clone ssh://[username]@[hostname]:[port]/Gerrit-BaseCloning into Gerrit-Base...
remote: Counting objects: 2, done
remote: Finding sources: 100% (2/2)
remote: Total 2 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (2/2), done.
Checking connectivity... done.

四、创建审查

本步骤操作前默认已完成了创建、删除或修改本地文件,并将修改添加、提交到本地版本库。

$ git statusOn branch master
Your branch is up-to-date with 'origin/master'.Untracked files:(use "git add <file>..." to include in what will be committed)hello_gerrithello_gerrit.cnothing added to commit but untracked files present (use "git add" to track)$ git add .
$ git commit -m "this is a new change"
$ git push origin HEAD:refs/for/master

在初次克隆代码时需要从服务器下载hook脚本用于每次审查自动生成change-id。

$ scp -p -P [port] [username]@[hostname]:hooks/commit-msg Gerrit-Base/.git/hooks/
$ git commit --amend
$ git push origin HEAD:refs/for/master

创建一个审核后,服务器的状态也会发送变化:

图片

五、审查代码

当提交修改成功后,默认情况下项目的所有者、管理员能够指定代码的审核人。指定审核人后,Gerrit会给审核人发送邮件提醒有审核任务。

审核代码的流程:

  1. 浏览代码增量,并给出注释;
  2. 浏览完成所有代码,并给出综合评价和评分(-2, -1, 0, 1, 2)。

多人评审后当总分>=2时,表示审核通过,进入下一步的代码验证流程;否则需要提交者返工修改。

图片

图片


这些根据规则的不同,可以进行对应的配置修改,例如不用评分。

六、返工修改

根据上面Gerrit流程图,当代码审核、确认未通过或合并的过程中出现冲突,这个时候就需要返工修改后再提交。

返工流程有三步:

  1. 获取未通过的代码到本地工作目录;
  2. 修改代码;
  3. 再提交审核。

对应的Git命令实现为:

$ git fetch http://[username]@[hostname]/Gerrit-Base refs/changes/35/35/1
$ git checkout FETCH_HEAD... // 修改代码
$ git add <path-of-reworked-file>// amend commit
$ git commit --amend// push patch set
$ git push origin HEAD:refs/for/master

修改后的提交,change-id不会发生变化,而仅仅是patch-id加1。因此对返工后的修改引用为“refs\/changes\/35\/35\/2”。

图片

七、验证、提交修改

新提交的修改,如果已经通过代码审核,下一步流程则是代码验证。验证之前需要代码测试人员先将修改获取到本地,然后对代码进行测试。代码测试后,则投票对本次修改做出评价。

图片


当代码成功通过Review和Verified后,此时这段修改后的代码片段就可以合并到主分支里面去了。

图片

八、常用命令

参考:Gerrit Code Review - Command Line Tools

gerrit ls-projects

显示项目名称列表,每行一个,调用用户帐户已被授予“读取”访问权限。 如果调用者是特权“管理员”组的成员,则会列出所有项目。

ssh -p <port> <host> gerrit ls-projects[--show-branch <BRANCH> …][--description | -d][--tree | -t][--type {code | permissions | all}][--format {text | json | json_compact}][--all][--limit <N>][--prefix | -p <prefix>][--has-acl-for GROUP]

选项说明:

  • --show-branch:该命令将显示每个项目的 sha 的分支。该命令可能有多个 --show-branch 参数,在这种情况下,将为每个分支显示 sha。如果用户没有对某个分支的 READ 访问权限或该分支不存在,则-显示存根(40 个符号)。如果用户无权访问项目中的任何分支,则不会显示整个项目。
  • --description允许列出项目及其各自的描述。对于文本格式输出,所有不可打印的字符(ASCII 值 31 或更小)都根据 C、Python 和 Perl 等语言中使用的约定进行转义,使用标准序列(如\nand \t),以及 \xNN所有其他语言。在 shell 脚本中,该printf命令可用于取消转义输出。
  • --tree:以树状格式显示项目继承。此选项不能与 show-branch 选项一起使用。
  • --type:仅显示指定类型的项目。如果未指定,则默认为all. 支持的类型:code:任何可能包含用户文件的项目。permissions:使用--permissions-only标志创建的项目。all:任何类型的项目。
  • --format:显示结果的输出格式。text:简单的基于文本的格式。json:描述每个项目的 JSON 对象的映射。json_compact:最小化 JSON 输出。
    • --all:显示调用用户帐户可访问的所有项目。除了调用用户帐户已被授予“读取”访问权限的项目外,这包括调用用户帐户拥有的所有项目(即使这些项目的“读取”访问权限未分配给调用用户帐户)。
  • --limit:将结果数限制为前 N 个匹配项。
  • --prefix:将结果限制为以指定前缀开头的项目。
  • --has-acl-for:仅显示直接分配了该组访问权限的项目。仅继承该组访问权限的项目未列出。
  • 使用此选项,您可以了解在哪些项目上使用了一个组。

gerrit query

Gerrit 的 gerrit query 命令就是要查询 Gerrit 的 changes 数据库。默认,查询结果是根据 changes 的更新时间,由近及远排序。对于有多个 patch set 的 change,默认查询结果只包含最后的 patch set。如果查询结果有很大,则默认只返回有限个查询结果,可以设置 limit:参数指定查询结果包含的 changes 数量。

ssh -p <port> <host> gerrit query[--format {TEXT | JSON}][--current-patch-set][--patch-sets | --all-approvals][--files][--comments][--commit-message][--dependencies][--submit-records][--all-reviewers][--start <n> | -S <n>]<query>[limit:<n>]

选项说明:

  • format=TEXT,默认
  • format=JSON
  • current-patch-set,给出当前 patch set 的信息
  • patch-sets,给出所有 patch set 的信息
  • commit-message,给出 change 的完整 commit message
  • all-reviewers,给出所有 reviewer 的 name 和 email

举个例子:查询某个提交的信息, 可以得到这次提交的,项目名字,owner, uploader,commit 信息,更新时间,code-reviewer,appover等。

ssh -p 29418 {gerrit_server} gerrit query --format=text change:123456 --current-patch-set 

其他常用命令:

  1. git review:将本地代码推送到Gerrit进行审查。

  2. git review -s:设置Gerrit的地址。

  3. git review -d :下载Gerrit上的代码变更。

  4. git review -m :查看Gerrit上的代码变更。

  5. git review -s :提交对Gerrit上的代码变更的评论。

  6. git review -R :提交对Gerrit上的代码变更的审批。

  7. git review -l :列出Gerrit上的指定仓库的代码变更。

相关文章:

Gerrit 使用教程

一、Gerrit简介 Gerrit&#xff0c;一种开放源代码的代码审查软件&#xff0c;使用网页界面。利用网页浏览器&#xff0c;同一个团队的程序员&#xff0c;可以相互审阅彼此修改后的代码&#xff0c;决定是否能够提交&#xff0c;退回或是继续修改。它使用版本控制系统Git作为底…...

sudu提权命令账号安全控制(su命令)执行单个命令并返回原用户、执行多个命令并返回原用户、保持当前环境变量、配置文件/etc/sudoers

su命令 su 命令是 Linux 和 Unix 系统中用于切换用户身份的命令。它允许一个用户变成另一个用户并以该用户的权限运行命令或启动新的 shell 会话。 基本语法 su [选项] [用户名] 用途&#xff1a; su[选项][-][用户[arg]…] 将有效用户id和组id更改为user的id。 A merely-im…...

【线性代数】【二】2.7 矩阵的秩

文章目录 前言一、向量组的秩二、矩阵的秩三、矩阵的可逆性与秩总结 前言 在前面的内容中&#xff0c;我们已经陆陆续续地给出了秩的概念。本文可以看成是对以往概念与性质的总结&#xff0c;那专门针对秩进行分析。 一、向量组的秩 在笔记2.2中&#xff0c;我们学习了极大线…...

计算机网络部分基础知识

网络协议的意义 单台主机内部的设备之间需要发送和接收消息&#xff0c;那么和相隔很远的两台主机之间发送消息有什么区别呢&#xff1f;两台主机通过网络发送消息&#xff0c;相当于两个网卡设备之间进行通信&#xff0c;最大的区别在于距离变长了。而距离变长带来的结果就是&…...

WESWOO合作的出海企业(一)

分享一些我们在shopify开发上合作的品牌介绍1. **韶音科技&#xff08;SHOKZ&#xff09;**&#xff1a; - WESWOO为韶音科技设计了多个产品页面&#xff0c;如OPENFIT、OPENSWIMPRO等&#xff0c;这些页面展示了产品特点、滑动特效、比较功能等&#xff0c;并通过品牌VI统一&a…...

vue 项目中 使用vxe-grid 表格中给表格的表头设置特殊的格式 , 并且给指定的列文字设置颜色

项目场景&#xff1a; 相关背景&#xff1a; vue 项目中 使用vxe-grid 表格中给表格的表头设置特殊的格式&#xff0c;并为指定的列文字设置颜色 实现方案&#xff1a; 具体实现方法及步骤&#xff1a; 一、给表格的表头设置特殊的格式 实现方式一&#xff1a; :header-row-s…...

基于SpringBoot的企业资产管理系统

TOC springboot117基于SpringBoot的企业资产管理系统 系统概述 1.1 研究背景 智慧养老是面向居家老人、社区及养老机构的传感网系统与信息平台&#xff0c;并在此基础上提供实时、快捷、高效、低成本的&#xff0c;物联化、互联化、智能化的养老服务。 随着科技进步&#…...

ps快捷键,学习

ps快捷键图片变的特别大&#xff0c;归位&#xff0c;ctrl0背景图层锁住 选中图层&#xff0c;点击顶部图层&#xff0c;新建&#xff0c;背景图层&#xff0c;确定&#xff0c;就解开了&#xff0c;想在锁住&#xff0c;在点一次...

python代码模拟服务器实验2:IO多路复用select

实验代码的环境是在windows&#xff0c;和linux是有差别的 在Windows系统上&#xff0c;select模块需要传递特定的对象类型&#xff0c;而不是文件描述符。在Unix-like系统上&#xff0c;文件描述符是一个整数&#xff0c;而在Windows上&#xff0c;select期望得到的是socket对…...

修改ubuntu的终端显示语言为英文,界面保持为中文

修改ubuntu的终端显示语言为英文&#xff0c;界面保持为中文 sudo nano /etc/default/locale LANGzh_CN.UTF-8nano ~/.bashrc 在文件未尾加入下列两行 export LANGen_US.UTF-8 export LANGUAGEen在终端执行 source ~/.bashrc之后提示语言就变成英文了...

重塑园区生态,引领产业智慧化新飞跃

中服云智慧园区平台基于工业物联网平台&#xff0c;在园区场景中集中运用云计算、物联网、大数据、人工智能、数字孪生、边缘计算等新一代信息技术。秉承产业主导、业务主导、效率主导的理念&#xff0c;通过一体化子系统集成、智慧化业务管理、可视化运营分析、人性化客户服务…...

WSL 忘记ubuntu的密码

文章目录 1. 以管理员身份打开 PowerShel2.输入命令 wsl.exe -d Ubuntu-20.04 --user root3.输入命令 passwd username 修改用户密码&#xff0c;username即待重置的用户的名称 1. 以管理员身份打开 PowerShel 2.输入命令 wsl.exe -d Ubuntu-20.04 --user root 注意版本号是自…...

github项目-创建一个新分支

在远程仓库创建一个分支实际上是在本地创建一个分支&#xff0c;然后将该分支推送到远程仓库。这是因为在 Git 中&#xff0c;您不能直接在远程仓库创建分支&#xff0c;而需要先在本地创建分支&#xff0c;然后将该分支推送到远程仓库。 以下是创建并推送新分支到远程仓库的步…...

Java设计模式中介者模式的优势与局限性分析

Java设计模式中介者模式的优势与局限性分析 一、引言 在软件工程中&#xff0c;设计模式是一种经过验证的解决方案&#xff0c;用于解决软件开发中常见的问题。设计模式的使用可以提高代码的复用性、可维护性和可扩展性。中介者模式&#xff08;Mediator Pattern&#xff09;…...

一、软件工程概述

软件工程概述 1. 软件的概念和特点2. 软件危机的产生3. 软件工程的概念和发展过程4. 软件工程知识体系与职业道德 1. 软件的概念和特点 软件定义 软件程序数据文档。 软件生存周期 问题定义&#xff1a;要解决的问题是什么&#xff1f;可行性分析&#xff1a;对于上阶段所确定…...

第六天:java设计模式、GUI编程与面向对象设计原则

第六天&#xff1a;设计模式、GUI编程与面向对象设计原则 1. 设计模式概述 设计模式的定义&#xff1a;回顾设计模式的定义&#xff0c;即解决特定设计问题的通用解决方案。常见设计模式&#xff1a;了解并掌握几种常见的设计模式&#xff0c;如单例模式、工厂模式、策略模式…...

解读RPA自动化流程机器人

RPA全称Robotic Process Automation&#xff0c;即机器人流程自动化&#xff0c;基于人工智能和自动化技术&#xff0c;能够将大量重复、规则明确的日常事务操作实现自动化处理&#xff0c;通常被形象地称为“数字员工”。本文金智维将深入探讨RPA的主要价值和应用领域&#xf…...

Redis17-服务端优化

目录 持久化配置 慢查询 什么是慢查询 如何查看慢查询 命令及安全配置 内存配置 集群优化 持久化配置 Redis的持久化虽然可以保证数据安全&#xff0c;但也会带来很多额外的开销&#xff0c;因此持久化请遵循下列建议&#xff1a; 用来做缓存的Redis实例尽量不要开启持…...

Web语义化及实际应用

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注&#xff01;今天一起了解下Web语义化及其应用吧&#xff01; 是什么&#xff1f; 使用合适的标签、属性&#xff0c;让页面能“说话“&#xff0c;让人和机器都能快速理解网页内容。 为什么&#xff1f; 有…...

Linux系统调试课:CPUFreq 中央处理器频率调节技术

文章目录 一、CPUFreq组成二、用户接口三、设备树配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢中央处理器频率调节(Central Processing Unit frequency,CPUFreq)技术可以降低ARM芯片的功耗,例如在系统对任务压力较小时,通过调整处理器工作频率与输入电压的…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...