环境:git

Gerrit Server:172.16.206.133 es6

Client:172.16.206.129shell

 

一、在Gerrit服务器上建立用户vim

Gerrit服务器使用的是HTTP认证类型,并用httpd作反向代理,建立用户使用如下命令浏览器

#cd  /home/gerrit2/gerrit/etcbash

[root@localhost etc]# htpasswd -m passwords user2服务器

New password: dom

Re-type new password: yii

Adding password for user user2ssh

根据提示输入密码便可(密码设置为123456),这样帐号就建立好了。建立完成,httpd和gerrit服务不须要重启。

 

二、登陆gerrit用户

用建立的user2帐号访问gerrit,在浏览器地址栏输入:

http://172.16.206.133:8080

输入登陆的帐号密码,帐号为user2,密码为123456

wKioL1cxh72j3sxnAAH_7PqFtdg542.png

 

三、修改gerrit用户配置

登陆后,在网页右上角点击本身的用户名,在点击“settings”。

wKioL1cxT6yh3itBAABV-Z3w2RA103.png

wKiom1cxTvyDOGa1AAIQnIKspGE990.pngsettings中就是用户的配置相关信息,须要注册邮箱和提交服务器上的公钥

一、提交公钥

注意:为何要提交公钥文件到gerrit服务器?若是不提交公钥,则不能使用git push命令将本地代码提交到gerrit服务器。公钥是一个认证方式。

在客户端172.16.206.129这台服务器上建立公、私钥对,具体命令以下:

[user2@host2 root]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user2/.ssh/id_rsa): Created directory '/home/user2/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user2/.ssh/id_rsa. Your public key has been saved in /home/user2/.ssh/id_rsa.pub. The key fingerprint is: fd:da:fa:c5:ec:6c:82:60:1f:39:15:bc:62:ec:51:15 user2@host2 The key's randomart p_w_picpath is: +--[ RSA 2048]----+ | . .E. | | + | | . . o | | .= o | | So.= | | o =. o | | . o +. + | | oo.+. | | ooooo | +-----------------+
 

生成的密钥文件以下:

[user2@host2 ~]$ ls .ssh/

id_rsa  id_rsa.pub

id_rsa.pub为公钥文件,将该文件中的内容,复制并粘贴到settings==>SSH Public Keys中,并点击Add

wKioL1cxUgfDFUVqAAGq3q-4bWk295.png

测试SSH key是否提交成功,在client 172.16.206.129服务器上执行如下命令:

#ssh -p 29418  user2@172.16.206.133

29418为gerrit上SSH服务器监听的端口,user2为登陆的gerrit帐号,注意这里咱们使用哪一个帐号登陆gerrit就使用哪一个帐号测试,而且该帐号已经登陆了gerrit服务器,并且公钥已经上传。172.16.206.133为gerrit服务器的IP

[user2@host2 .ssh]$ ssh -p 29418 user2@172.16.206.133 The authenticity of host '[172.16.206.133]:29418 ([172.16.206.133]:29418)' can't be established. RSA key fingerprint is 93:d3:47:c2:15:32:f0:41:d9:e6:7f:88:66:01:f3:9b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[172.16.206.133]:29418' (RSA) to the list of known hosts. **** Welcome to Gerrit Code Review **** Hi user2, you have successfully connected over SSH. Unfortunately, interactive shells are disabled. To clone a hosted Git repository, use: git clone ssh://user2@172.16.206.133:29418/REPOSITORY_NAME.git Connection to 172.16.206.133 closed.
 

能够看到链接成功,说明SSH Public Key上传成功。

 

为user2注册邮箱

wKiom1cxU7GAHRFDAAGEtbEIY_0461.png

点击Register后,登陆你刚才注册的邮箱,激活便可。

 

 

四、建立用户组并建立一个项目

注意,只有管理员组的用户才能建立group和Project

登陆Gerrit管理员帐号admin,建立一个新的组为group2。并将user2帐号加入该组

wKioL1cxVyeQLKvEAAC6XxXWCvc918.png

wKioL1cxVyiieK8VAAGaaMumo9Q911.png

 

新建一个Project,名为Project2

wKioL1cxWsKynVNDAAICK7gAolU605.png

wKioL1cxWsWjwjEwAAMaT5CjD8I516.png

 

五、gerrit代码审核流程

前面都是准备工做,接下来演示gerrit如何作代码审核的

a、client server( 172.16.206.129)的git初始配置

配置用户名和邮箱

#git config --global user.name "user2"

#git config --global user.email "YOUR EMAIL-ADDRESS"

 

b、用帐户user2登陆gerrit 

在Projects==> List中找到Projects2,而后点击Clone with commit-msg hook, 在点击ssh按钮,

复制ssh下面项目地址:

git clone ssh://user2@172.16.206.133:29418/Project2 && scp -p -P 29418 user2@172.16.206.133:hooks/commit-msg Project2/.git/hooks/
 

直接将刚才复制的命令,在client server的命令行运行

git clone ssh://user2@172.16.206.133:29418/Project2 && scp -p -P 29418 user2@172.16.206.133:hooks/commit-msg Project2/.git/hooks/
 

 

注意:步骤b必定选Clone with commit-msg hook下面的地址来clone,不然在客户端使用git push

命令提交代码时会报错。若是不须要向gerrit服务器提交代码,那么你只需使用

git clone ssh://user2@172.16.206.133:29418/Project2

或者git clone http://user2@172.16.206.133:8081/a/Project2

 

 

c、建立一个文件,并提交到gerrit服务器端

[user2@host2 Project2]$ vim test.sh aaaaaaaaaaaaa bbbbbbbbbbbbb ccccccccccccc
 

用git add 和git commit命令将文件保存到git仓库中

[user2@host2 Project2]$ git add test.sh [user2@host2 Project2]$ git commit -m "建立了test.sh文件" [master 16462e9] 建立了test.sh文件 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 test.sh
 

 

d、用git push命令将代码从本地传到gerrit服务器对象项目下的master分支

[user2@host2 Project2]$ git push origin master:refs/for/master Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 341 bytes, done. Total 3 (delta 0), reused 0 (delta 0) remote: Processing changes: new: 1, refs: 1, done remote: remote: New Changes: remote: http://172.16.206.133:8081/5 建立了test.sh文件 remote: To ssh://admin@172.16.206.133:29418/Project2 * [new branch] master -> refs/for/master
 

origin:远程仓库的名称,用git remote 能够查看全部的远程仓库名称

[user2@host2 Project2]$ git remote origin
 
master:refs/for/master 表示将代码从本地的master分支传到远端的master分支,固定格式就是这样
 

 

e、用user2帐号登陆Gerrit Web UI,邀请管理员admin来作code review。

注意:以前忘记截图了,因此下图不是原图,可是基本上都同样,只有Owner和Project不对而已。

Add:添加指定用户来进行Code Review

Cherry Pick:切换分支,当执行push操做以后若是发现分支不对,须要切换,能够在这里点击Cherry Pick按钮进行分支切换操做。

Abandon:撤销push操做,当push以后,若是发现代码有问题,须要修改,能够点击这个按钮,而后修改代码,修改完成后,再次push,而后登录Gerrit Web UI,会有一个Restore按钮,这时候点击Restore,就能够从新申请Code Review。

Rebase和Follow-Up没有找到相关资料wKioL1c6xyeAx7QTAAEVKOf0oBY681.png

 

 

 

 

 

e、看看Gerrit服务器上是否有code review的信息

登陆gerrit管理员帐号admin,在ALL下面点击“Open”,看到“建立了test.sh”这条记录。

这里“建立了test.sh文件”就是git commit -m "建立了test.sh文件" 这条命令产生的

wKioL1cxd0KC9IBEAAJt4--8EoI491.png

点开这条记录,看到如下信息

 

wKioL1cxd0biNku7AARvdB2TlY4241.png

 

咱们能够点开test.sh文件看到里面的内容

wKioL1cxeGuDJUuNAAEkJvYYuEs066.png

 

还能够看到提交者的信息:

wKioL1cxeRrASYpkAAEtZeZW_es670.png

这里显示的用户名和邮箱地址实际上是在client server上初始化git时,用如下命令配置的

#git config --global user.name "user2"

#git config --global user.email "YOUR EMAIL-ADDRESS"

 

点击上上图中的code review和replay进行代码审核

wKiom1cxebSB85xGAAEUOX7Xn3A497.png-2 表示不经过,+2表示代码ok能够经过审核,目前尚未深究这个,我理解的就是这样子的。

审核后能够看到审核的日志

wKioL1cxe1iyH_XTAAEcFP-mH0E976.png

 

以上就是gerrit代码审核的流程,gerrit仓库是纯粹的代码仓库,不存在work tree这个说法。因此在gerrit仓库里面执行git命令都会报错:

[root@localhost Project2.git]# git status fatal: This operation must be run in a work tree
 

可是,若是用git clone将gerrit仓库里面的项目clone下来后,就自动变成了一个git仓库。