環境:

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,在瀏覽器地址欄輸入:

http://172.16.206.133:8080

輸入登錄的賬號密碼,賬號為user2,密碼為123456

wKioL1cxh72j3sxnAAH_7PqFtdg542.png

 

3、修改gerrit用戶配置

登錄后,在網頁右上角點擊自己的用戶名,在點擊“settings”。

wKioL1cxT6yh3itBAABV-Z3w2RA103.png

wKiom1cxTvyDOGa1AAIQnIKspGE990.pngsettings中就是用戶的配置相關信息,需要注冊郵箱和提交服務器上的公鑰

1、提交公鑰

注意:為什么要提交公鑰文件到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后,登錄你剛才注冊的郵箱,激活即可。

 

 

4、創建用戶組並創建一個項目

注意,只有管理員組的用戶才能創建group和Project

登錄Gerrit管理員賬號admin,創建一個新的組為group2。並將user2賬號加入該組

wKioL1cxVyeQLKvEAAC6XxXWCvc918.png

wKioL1cxVyiieK8VAAGaaMumo9Q911.png

 

新建一個Project,名為Project2

wKioL1cxWsKynVNDAAICK7gAolU605.png

wKioL1cxWsWjwjEwAAMaT5CjD8I516.png

 

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下面項目地址:

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倉庫。