Git Review + Gerrit 安裝及使用完成 Code-Review


轉載自:https://cloud.tencent.com/developer/article/1010615

1、Code Review 介紹

Code Review 代碼評審是指在軟件開發過程中,對源代碼的系統性檢查。Code Review 是一種用來確認方案設計和代碼實現的質量保證機制,通過這個機制我們可以對代碼,測試過程和注釋進行檢查。Code Review 主要用來在軟件工程過程中改進代碼質量,查找系統缺陷,保證軟件總體質量和提高開發者自身水平。

2、Gerrit 介紹

Gerrit 是一個免費、開放源代碼的代碼審查軟件。利用網頁瀏覽器,同一個團隊的軟件程序員,可以相互審閱彼此修改后的程序代碼,決定是否能夠提交,退回或者繼續修改。Gerrit 是使用 Git 作為底層版本控制系統,通過網頁界面,能方便的做代碼審核工作的一個輕量型框架,出自google團隊的開源項目。

這里我們要實現的是,本地 Git 提交代碼 review 到 Gerrit,在 Gerrit 上做 Code Review,如果 commit 通過則直接 merge 到分支,不通過則再修改並 update patch set 或者直接 abandon 掉。

3、環境、軟件准備

本次演示環境,我是在本地機器 Mac 上操作,以下是安裝的軟件及版本:

  1. Docker:version 17.03.1-ce
  2. Git:version 2.10.1
  3. Gerrit:version 2.13.5
  4. Git-Review:version 1.25.0

注意:Gerrit 這里我使用基於 Docker 安裝,所以需要先安裝一下 Docker,后邊演示 Git-Review 操作,需要本地先安裝 Git,這里 Git、Docker 的安裝忽略。

4、 Git-Review 安裝

git-review 安裝方式很簡單,針對不同的系統,安裝方式也不同。

Linux系統上 yum | apt-get 安裝

sudo yum install git-review
sudo apt-get install git-review

Mac OS X 上 pip | Homebrew 安裝

1、pip安裝方式
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py
$ sudo pip install git-review

2、Homebrew 安裝
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ sudo brew install git-review 

安裝完畢后,可以通過 git review --help 查看 review 命令相關信息。

5、Gerrit 安裝

Gerrit 詳細的安裝過程,可參考我之前的文章 記錄Gerrit2.8.4環境遷移、安裝、配置以及問題解決 寫的比較詳細。這里我在本地使用 docker 快速搭建一個簡單的 gerrit 服務。

$ docker pull openfrontier/gerrit
$ docker run --name gerrit -p 9000:8080 -p 29418:29418 -v /Users/wanyang3/gerrit/review_site:/var/gerrit/review_site openfrontier/gerrit

啟動完成后,本地訪問 http://127.0.0.1:9000/ 即可訪問 Gerrit 網頁版。

6、簡單的 Demo 示例

6.1 注冊登錄

默認 Gerrit 登錄,需要點擊頁面右上角 “Become in”, 然后注冊賬號。 如果 Gerrit 配置 LDAP 登錄,則需要在修改配置文件 /Users/wanyang3/gerrit/review_site/etc/gerrit.conf,配置上 LDAP 相關信息,然后點擊頁面右上角 “Sign In”,輸入用戶名、密碼即可登錄,系統自動將用戶信息入庫。 注意:第一個注冊的帳號或者 LDAP 登錄的用戶,默認為管理員。

img

6.2 上傳公鑰

為了方便以后操作,這里我們使用 ssh 方式連接。Gerrit 配置 ssh key 也很簡單。 登錄系統后,點擊右上角用戶名 -> Settings -> SSH Public Keys -> Add Key,把自己本地的公鑰復制到文本域里,點擊 Add 即可。本地生成 SSH Key如下:

$ ssh-keygen –t rsa 
$ cat ~/.ssh/id_rsa.pub #內容復制到上邊文本域中。

img

6.3 創建項目

下邊我們開始創建一個demo項目,項目名為 review_demo,點擊 Projects -> Create New Project -> 輸入 Project Name -> 點擊 Create Project。

6.4 Clone 項目

clone 遠程項目到本地,這里 clone 有兩種,第一種只 clone 項目,第二種 clone 項目的同時,復制 gerrit 提供的 commit-msg 鈎子腳本,它的作用是在每次新的提交時生成 change-id。

第一種:
git clone ssh://wanyang3@127.0.0.1:29418/review_demo
第二種:
git clone ssh://wanyang3@127.0.0.1:29418/review_demo && scp -p -P 29418 wanyang3@127.0.0.1:hooks/commit-msg review_demo/.git/hooks/

6.5 git review 操作

cd review_demo
git remote add gerrit ssh://wanyang3@127.0.0.1:29418/review_demo 
#這里因為 git-review 在使用 gerrit 時會默認查找名為 gerrit 的 remote,
如果 remote 存在,則 git-review 將提交當前分支到 remote 的 HEAD:refs/for/master
如果 remote 不存在,則 git-review 會查找 .gitreview 文件,所以我們需要創建一個 .gitreview 文件。

vim .gitreview

[gerrit]
host=127.0.0.1
port=29418 
project=review_demo 
defaultbranch=develop #這里指向了 develop 分支。

接下來正常執行 git 操作,但是 commit 完成后,不需要 push,只需要執行:
git review #會自動推送到我們的 gerrit 服務器上
然后相關負責人去 gerrit 上做 Code review,如果審核通過,則 Merge 到分支,若未通過,則可直接 Abandon 掉或者 Code-Review -2打回。

注意:當我們提交的commit審核未通過時,我們再修改完成之后,執行:
git add .
git commit --amend #注意這里會保留上次的 change-id,gerrit 將不會生成新的評審任務編號,使用原有任務編號,並將本次提交作為老評審任務的補丁。
git review

6.6 示例操作

$ vim test.txt
$ git add .
$ git commit -m "add test.txt"
[develop 636e853] add test.txt
 1 file changed, 1 insertion(+), 2 deletions(-)
$ git review
remote: Processing changes: new: 1, refs: 1, done
remote:
remote: New Changes:                              ###6.6.1 新的 change
remote:   http://127.0.0.1:9000/11 add test.txt   ###6.6.1 序號11
remote:
To ssh://127.0.0.1:29418/review_demo
 * [new branch]      HEAD -> refs/publish/develop

此時,本次 commit 已經提交到 gerrit 上,並生成好了change-id,等待審核 Code-Review。這里演示先 Code-Review -1,然后 Code-Review -2,相當於本次提交不通過。接下來,我們在做一下修改,再次提交(注意:這里我們要使用上一次提交的 change-id,意思是再次提交作為上一次的修改補丁),最后 Code-Review +1,Code-Review +2 審核通過本次提交,真正合並到分支上。(以上都是用我一個人的賬號進行 Code-Review,實際應用中,可以事先指定好各審核人。)

$ vim test.txt
$ cat test.txt
This is test message for review_demo.
I have modify the bug, please let me pass.
$ git add .
$ git commit --amend
[develop b0e8fc1] add test.txt
 Date: Mon Aug 14 10:19:54 2017 +0800
 1 file changed, 2 insertions(+), 2 deletions(-)
$ git review
remote: Processing changes: updated: 1, refs: 1, done
remote:
remote: Updated Changes:                          ###6.6.2 更新 change
remote:   http://127.0.0.1:9000/11 add test.txt   ###6.6.2 序號11
remote:
To ssh://127.0.0.1:29418/review_demo
 * [new branch]      HEAD -> refs/publish/develop

#從打印的日志信息中6.6.1和6.6.2就可以看出來,本次 commit 是針對上一次提交的 update,使用的是同一個 change-id。

img

至此,針對本次的修改才被真正 merge 到分支上了。當然 gerrit 能做的還有很多,如權限控制,分組等等,這里只介紹了最簡單的也是最核心的 Code-Review 功能的簡單使用。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM