環境:
Gerrit Server:172.16.206.133
Client:172.16.206.129
1、在Gerrit服務器上創建用戶
Gerrit服務器使用的是HTTP認證類型,並用httpd做反向代理,創建用戶使用以下命令
#cd /home/gerrit2/gerrit/etc
[root@localhost etc]# htpasswd -m passwords user2
New password:
Re-type new password:
Adding password for user user2
根據提示輸入密碼即可(密碼設置為123456),這樣賬號就創建好了。創建完成,httpd和gerrit服務不需要重啟。
2、登錄gerrit用戶
用創建的user2賬號訪問gerrit,在瀏覽器地址欄輸入:
輸入登錄的賬號密碼,賬號為user2,密碼為123456
3、修改gerrit用戶配置
登錄后,在網頁右上角點擊自己的用戶名,在點擊“settings”。
settings中就是用戶的配置相關信息,需要注冊郵箱和提交服務器上的公鑰
1、提交公鑰
注意:為什么要提交公鑰文件到gerrit服務器?如果不提交公鑰,則不能使用git push命令將本地代碼提交到gerrit服務器。公鑰是一個認證方式。
在客戶端172.16.206.129這台服務器上創建公、私鑰對,具體命令如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[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 image 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
測試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
1
2
3
4
5
6
7
8
9
10
11
|
[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注冊郵箱
點擊Register后,登錄你剛才注冊的郵箱,激活即可。
4、創建用戶組並創建一個項目
注意,只有管理員組的用戶才能創建group和Project
登錄Gerrit管理員賬號admin,創建一個新的組為group2。並將user2賬號加入該組
新建一個Project,名為Project2
5、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下面項目地址:
1
|
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的命令行運行
1
|
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服務器端
1
2
3
4
|
[user2@host2 Project2]$ vim
test
.sh
aaaaaaaaaaaaa
bbbbbbbbbbbbb
ccccccccccccc
|
用git add 和git commit命令將文件保存到git倉庫中
1
2
3
4
5
|
[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分支
1
2
3
4
5
6
7
8
9
10
11
12
|
[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 可以查看所有的遠程倉庫名稱
1
2
|
[user2@host2 Project2]$ git remote
origin
|
1
|
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。
e、看看Gerrit服務器上是否有code review的信息
登錄gerrit管理員賬號admin,在ALL下面點擊“Open”,看到“創建了test.sh”這條記錄。
這里“創建了test.sh文件”就是git commit -m "創建了test.sh文件" 這條命令產生的
點開這條記錄,看到以下信息
我們可以點開test.sh文件看到里面的內容
還可以看到提交者的信息:
這里顯示的用戶名和郵箱地址其實是在client server上初始化git時,用以下命令配置的
#git config --global user.name "user2"
#git config --global user.email "YOUR EMAIL-ADDRESS"
點擊上上圖中的code review和replay進行代碼審核
-2 表示不通過,+2表示代碼ok可以通過審核,目前還沒有深究這個,我理解的就是這樣子的。
審核后可以看到審核的日志
以上就是gerrit代碼審核的流程,gerrit倉庫是純粹的代碼倉庫,不存在work tree這個說法。所以在gerrit倉庫里面執行git命令都會報錯:
1
2
|
[root@localhost Project2.git]
# git status
fatal: This operation must be run
in
a work tree
|
但是,如果用git clone將gerrit倉庫里面的項目clone下來后,就自動變成了一個git倉庫。