Gerrit工作流程及使用手册
gerrit的流程、权限控制其实对于初次接触的同学们来说,确实有点复杂。我希望这篇文章过后,我们能对gerrit的流程有一个大致的了解。
这篇文章将用一个真实的例子,演示一下gerrit的管理员,普通项目成员是如何协同完成项目管理工作的。
这篇文章首先会大致讲解下gerrit的工作流程;然后介绍管理员的相关配置工作,包括设置SSH密钥验证,添加新成员;接下来会用一个示例演示普通成员push一个commit之后,代码审核员是如何进行审核的;最后介绍一下如何使用sourceTree上传代码到gerrit服务器。
提醒:
这篇文章需要一定的git基础,如果你还不熟悉git,请先学习下关于git的相关知识。
这篇文章中的所有操作不再需要登录到gerrit服务器上去了,因为所有的操作都是在管理员或者普通成员的电脑上完成的,至于管理员对组员的操作,也可以在管理员自己的电脑上通过SSH连接到gerrit服务器上完成。
**
gerrit工作流程
**
好不容易在google上找了一篇相对简单明了的介绍gerrit工作流程的图:
使用过git的同学,都知道,当我们git add --> git commit --> git push
之后,你的代码会被直接提交到repo,也就是代码仓库中,就是图中橘红色箭头指示的那样。
管理员配置
在上一篇文章的最后,我们做为管理员,初次登录到了gerrit的web页面中,接下来还有很多内容需要设置一下。我们依次来看看吧。
profile
初次登录时,Full Name 和 Email Address 字段都是空的,待会我们会一一设置。没有设置之前,右上角显示的用户名称也是admin
Preferences
Watched Projects
注意,后面的那些选项,勾选了某一项,就表示仅仅给当前项发送邮件提醒,保险期间,我们就全部勾上就好了。
Contact Information
这里是当前账号的配置,你可以在这里把full-name填写完全,这样右上角也会同步更新你刚设置好的名称。
不过因为SSH命令行的方式需要配置SSH公钥,所以我们这里先留空,一会通过命令行来配置。
SSH Public Keys
这里需要把你的公钥内容拷贝出来,然后粘贴到对话框中。我简单演示下如何操作。
生成公私钥对
如果你之前有使用过git,那你一定已经生成了公私钥对,可以直接跳过这个步骤。
在命令行中输入下面的内容:
$ ssh-keygen -t rsa
然后会提示你输入一个密码,用来访问公私钥,可以直接回车表示不加密码。接下来就会自动帮你创建好一对公私钥了。
找到公钥文件
默认公私钥的是放置在~/.ssh目录下的,默认的名称是id_rsa和id_rsa.pub。其中.pub文件就是公钥,私钥你自己需要保存好。我们来看下我的.ssh文件夹中的内容
1、config是ssh的配置文件,稍后我们会演示通过管理员ssh连接到gerrit服务器时,会在来看这个文件
2、lipeng和lipeng.pub分别是我的私钥和公钥
Groups
示例
接下来我们来做一个演示,看看一个新的成员是如何被添加到gerrit服务器中,然后他们又是如何协同工作的。
这里一共涉及到两个角色,一个是管理员,一个是普通成员。
管理员设置SSH
在之前的文章中我们提到过,gerrit自带的H2数据库就完全够用了,对成员的管理,邮件添加等操作,均可以通过SSH来完成。那第一步我们就来看一下管理员如何才能远程SSH到gerrit服务器。
首先确保在之前,已经成功把你的公钥添加到了web页面账户中。
接下来,需要修改之前~/.ssh/文件夹下面的config文件,我们拿我的config文件做为示例,做个讲解。
我们看到这里面有两个Host部分,我们重点来看第2个Host部分,这个是我们新建的,用于连接到gerrit服务器的配置。
照猫画虎,对于我们之前建立在192.168.1.100的gerrit服务器来说,你的Host配置可能如下:
Host gerrit
HostName "192.168.1.100"
User "admin"
IndentityFile "~/.ssh/id_rsa"
port 29418
User要和我们在gerrit服务器上注册的名称保持一致( 不是 full-name),认证文件注意要和公钥对应的私钥文件,端口要填写gerrit服务的端口号,这里是默认的29418。
配置完config文件,我们就可以SSH到gerrit了,我们来尝试一下吧:
添加普通成员
在管理员添加新的组员之前,我们需要先在普通成员的机器上生成ssh的公私钥,这里方便描述,我们把这个普通成员命名为test3。
在test3的电脑命令行中,生成利用ssh-keygen命令,生成公私钥。
接下来,管理员在命令行中输入如下的命令来完成添加普通成员的操作。注意: 这个命令很强大很方便,可以一步到位地把成员的的名称,全名,邮箱以及ssh公钥认证全部设置好。
$ cat ~/home/id_rsa.pub | ssh gerrit gerrit create-account --full-name test3 --email test3@microwu.com --ssh-key - test3
| 符号把这个命令分成了两部分,第一部分的cat ~/home/id_rsa.pub表示把test3的公钥内容读入到输入流中
ssh gerrit是我们之前在~/.ssh/config中配置好的gerrit服务器地址
又接着一个gerrit表示通过ssh中输入gerrit命令来进行相关操作
create-account 表示要新建用户。注意,新建的用户名写在最后面,中间是其他参数
full-name 就如同页面中的全名,我们这里命名为test3
email表示该用户的email地址,我们填入 test3@microwu.com
ssh-key - 注意,最后的- 表示从输入流中读取ssh的公钥内容,也就是 | 符号之前我们读入的test3用户公钥内容
最后面加上我们要create的用户名称
这个命令执行完之后,管理员就把test3用户加入到了gerrit用户组中,并且设置了他的全称,邮件以及公钥文件,是不是一步到位,非常方便??
这里我们回过头来,在管理员首次登陆web页面进行修改配置的时候,我们说过,管理员的邮箱可以通过命令行来设置,是的,同样通过ssh命令行:
$ ssh gerrit gerrit set-account --add-email admin@microwu.com admin
这个命令就表示为我们的admin用户添加emailadmin@microwu.com。执行完这个命令,再回到web界面上的用户设置界面,看看是不是管理员的email已经被设置好了??
修改用户所在组
接下来我们看一下怎样修改test3用户所在的组吧。我们知道他已经出在Anonymous Users组中了,那我们想要新建一个组,就叫test_user吧,我们来看一下
选择Create New Group,输入我们要添加的新的分组 test_user
新建和修改项目
点击Project,然后Create New Project, 创建一个名为test2的项目吧。
修改权限的时候慎重,不要直接修改All-Projects组的权限,因为这个是所有项目的依赖权限组,修改了以后,所有的项目权限都会跟着发生变化。
我们把Reference改成refs/*,表示所有的refs下的分支
然后选择read项目
我们把Anonymous Users分组中的用户设置为DENY
把我们刚建立好的,并且添加了test3用户的test_user分组权限设置为ALLOW
这样,当前的工程就只能被test_user组内的用户所访问,其他组的用户均无法访问了!
test3用户clone工程
接下来我们来到test3用户的电脑上,下拉刚刚创建的test2工程
在命令行执行下面的命令,就可以把test2工程给clone下来了
$ git clone ssh://test3@192.168.1.100:29418/test2.git
对比下,会发现我们的目录中多了一个名为test2的文件夹,这个就是我们的工程了!
注意如果从ssh方式clone下来的工程,里面是自带了hooks文件夹的,这个文件夹很重要!!如果不是用ssh://方式克隆下来的,还没有这个文件夹,需要我们自己mkdir
我们直接新建一个test.md文件,来尝试着往远程提交。
注意: 前方会出现很多错误,耐心一步一步来
提交
$ git add test.md
$ git commit
在commit的时候,发现提交者的名称和email都是错误的,我们需要先配置成我们当前的test3用户,以及对应的email
$ git config user.name test3
$ git config user.email test3@microwu.com
通过git config --list来查看一下当前git仓库的配置,发现已经把用户名和密码正确设置了。
我们把这次提交命名为commit_1,然后我们通过git push命令来推送
You are not allowed to perform this operation
[remote rejected] master -> master (prohibited by Gerrit)
这就是我们在文章开头提到的问题,我们需要push到refs/for/master那条线上!!
$ git config remote.origin.push refs/heads/*:refs/for/*
这行命令的意思是,当执行push命令时,将会推送到refs/for/当前head所在的分支上。
我们设置了push命令之后,重新进行push,结果又报错了。。
这次的错误是:
missing Change-Id in commit message footer
我们可以看一下 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 找到的id命令回退
这次我们终于提交成功了,可以看到提交到的分支是refs/for/master
管理员审查
接下来我们回到管理员的web页面,会发现,test3用户刚提交的那条已经在页面中了
点击顶部的My --> Watched Changes
与此同时,我们会收到来自gerrit@microwu.com发送来的邮件了:
reply之后,如果分数够了2分,就可以直接submit到主线上去了
合并了之后,可以在 My --> Changes 中看到我们的审核历史
到这里,一个完整的从普通项目成员提交,到代码审核人员检查的全过程,就结束了。
SourceTree
SourceTree是git的可视化工具,也是比较流行的git工具,通过sourceTree我们一样可以commit,push等,而且更方便直观地看到项目的历史等等。
在上面的示例中,我们都是通过命令行来完成git的相关操作的,那通过soureTree,我们同样需要注意那两点:
commit时要有Change-Id
push一定要到refs/for/master分支上
这里还需要额外注意一点:
如果我们是通过soureTree工具clone项目,而不是通过ssh://方式来clone,那么工程中的.git文件夹中是没有hooks文件夹的,需要我们手动去文件夹中创建
我们在管理员的视角从gerrit服务器上拉取之前的test2工程吧:
Source URL中填入gerrit:test2.git。 因为我们之前已经在.ssh/config文件中设置好了名为gerrit的HOST所以这里就可以简写了
可以看到test3用户提交的commit_1,因为已经通过审核了,所以,就合并到master中了
我们到当前的目录中,看一下.git文件夹,确实是没有hooks文件夹的
我们通过scp gerrit:hooks/commit-msg hooks/命令来拉取commit-msg文件
同时通过git config remote.origin.push refs/heads/*:refs/for/*命令来设置push命令
设置自定义push
最后当我们要通过推送到gerrit服务器时,在当前的分支上,右键,然后点击Custom Actions,再选择我们刚创建的push to gerrit动作,就实现了推送到gerrit服务器的功能!!
Gerrit工作流程及使用手册相关推荐
- 【Gerrit】Gerrit工作流程及使用手册
gerrit的流程.权限控制其实对于初次接触的同学们来说,确实有点复杂.我希望这篇文章过后,我们能对gerrit的流程有一个大致的了解. 这篇文章将用一个真实的例子,演示一下gerrit的管理员,普通 ...
- 《调色师手册:电影和视频调色专业技法(第2版)》——第1章 调色的工作流程 我要为电影院(电影)、广播(电视),还是网络调色?...
本节书摘来自异步社区<调色师手册:电影和视频调色专业技法(第2版)>一书中的第1章,我要为电影院(电影).广播(电视),还是网络调色?,作者 [美]Alexis Van Hurkman(阿 ...
- 《调色师手册:电影和视频调色专业技法(第2版)》——往返工作流程(Round-Trip workflows)...
本节书摘来自异步社区<调色师手册:电影和视频调色专业技法(第2版)>一书中的第1章,往返工作流程(Round-Trip workflows),作者 [美]Alexis Van Hurkma ...
- 通达OA软件测试自学,通达OA工作流程及快速入门手册.doc
\ "" \ \ \ \ "" .通达工作流程案例 \ \ "" 发文收文件 \ \ "" 发文 \ \ "& ...
- 流程控制 - PHP手册笔记
流程控制 - PHP手册笔记 原文:流程控制 - PHP手册笔记 脚本由语句构成,语句靠流程控制实现功能,这一节主要介绍了几个关键字的使用. elseif elseif和else if的行为完全一样, ...
- 前端工作流程自动化——Grunt/Gulp 自动化
前端工作流程自动化--Grunt/Gulp 自动化 Grunt/Gulp 都是node.js下的模块,简单来说是自动化任务运行器,两者都有社区及大量的插件支撑,在所有的自动化工具领域里,这两者是最好的 ...
- 软件测试工作流程规范
对于软件测试工作流程,以及过程中的应遵循的流程规范,对软件测试初入者来说可能一知半解,今天笔者就将曾用过的一份软件测试工作流程标准整理分享给大家,希望能让你对测试流程有个清晰的认知.如果你采纳,那也注 ...
- Android中管理代码基本工作流程
原文地址 译者:远方的自由 转载请注明出处: http://blog.csdn.net/z2066411585 描述 管理Android代码需要使用Git(一个开源的版本控制系统)和Repo(Git上 ...
- 分布式管理控制系统Git与项目托管平台Github相关概念、工作流程与操作方法
尐轩web前端技术博客 -- 丛培森 Payen S.Tsung --There's no place like 127. 0. 0. 1 目录视图 摘要视图 订阅 CSDN学院招募微信小程序讲师啦 ...
最新文章
- Received status code 403 from server: ForbiddenDisable Gradle ‘offline mode‘ and sync project
- css3的动画详解 html直接可以运行
- boost::lambda::is_instance_of_1用法的测试程序
- cockpit代替secureCRT
- Excel VBA 入门(零)
- 未来无人车市场中,谁最赚钱?
- arm-linux gcc 指针 取值,GCC存储的字符串常量以及这些指针映射的位置在哪里?
- 机器学习作业班_python实现逻辑回归多类分类
- 前端工程化--yeoman使用
- php怎么解析xml,php解析xml方法实例详解
- MacBook 如何使用两个微信(微信双开)
- 论一个女程序员的自我修养
- 单源最短路径bellman算法
- Google Dremel 原理 - 如何能 3 秒分析 1PB
- uClinux移植概述
- 几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny
- 计算机专业助我成长作文600,科技伴随我成长作文
- android 定时器倒计时,Android CountDownTimer实现定时器和倒计时效果
- 【Linux】调节屏幕亮度
- 最新出炉 csdn最牛最全JMeter+Ant+Jenkins接口自动化测试框架(Windows)