Gerrit 工作流程及简单使用
1.Gerrit
Gerrit,一種開放源代碼的代碼審查軟件,使用網(wǎng)頁界面。利用網(wǎng)頁瀏覽器,同一個團(tuán)隊(duì)的軟件開發(fā)者,可以相互審閱彼此修改后的代碼,決定是否能夠提交,回退或是繼續(xù)修改。它使用版本控制系統(tǒng)Git作為底層。[1]
1.1 Gerrit和Gitlab區(qū)別
gitlab的特點(diǎn)是一個人維系一個分支。
gerrit的特點(diǎn)是一個團(tuán)隊(duì)維系一個分支。
gitlab 可以根據(jù)需要創(chuàng)建project,每個團(tuán)隊(duì)可以根據(jù)自己的需求管理自己的代碼,方式更加的靈活。
gerrit比較單一,而且權(quán)限配置比較復(fù)雜,往往都是要聯(lián)系管理員做出修改,每個團(tuán)隊(duì)很難做到對代碼的個性化管理。
代碼評審
gitlab是以merge request作為一次review,merge request中可能包含多個 commit,如果review不通過也不需要發(fā)起另一次merge request。
gerrit是以commit作為一次review,由于changeId的存在,可以對一次commit反復(fù)的進(jìn)行review。 如果task劃分的粒度夠細(xì)的話,并不會影響各個團(tuán)隊(duì)的review習(xí)慣。
團(tuán)隊(duì)協(xié)作
gitlab可以選擇公開代碼,團(tuán)隊(duì)間可以看到互相的代碼,有利于團(tuán)隊(duì)的協(xié)作。
gerrit由于權(quán)限控制問題,只能在權(quán)限范圍內(nèi)公開代碼。
信息共享
gitlab 可以提供issues,wiki等功能方便開發(fā)者與使用者之間的溝通,并且gitlab可以無縫的與一些項(xiàng)目管理工具集成,比如:jira。
gerrit 這個方面比較欠缺。
gitlab每個項(xiàng)目都有自己的wiki,很方便查看。
參考:
https://lipeng1667.github.io/2017/01/18/gerrit-guide/
https://blog.csdn.net/bjstyle/article/details/79107086
https://zh.wikipedia.org/wiki/Gerrit
2.工作流程
如果你使用過git,當(dāng)我們git add --> git commit --> git push 之后,你的代碼會被直接提交到repo,也就是代碼倉庫中,就是圖中橘紅色箭頭指示的那樣。
Gerrit流程:
----》程序員寫代碼
----》push到gerrit服務(wù)器
----》審核人員,在web頁面進(jìn)行代碼的審核(review),(可以單人審核,也可以邀請其他成員一同審核),
----》審核通過(approve)之后,
----》提交(submit)到代碼倉庫(repo)中去。
在使用過程中,有兩點(diǎn)需要特別注意下:
假如我們遠(yuǎn)程只有一個master主線,那么只有當(dāng)你的代碼被提交到refs/for/master分支時,gerrit才會知道,我收到了一個需要審核的代碼推送,需要通知審核員來審核代碼了。
當(dāng)審核通過之后,gerrit會自動將這條分支合并到master主線上,然后郵件通知相關(guān)成員,master分支有更新,需要的成員再去pull就好了。
3.使用
1.用戶clone工程
在命令行執(zhí)行下面的命令,就可以把test2工程給clone下來了
$ git clone ssh://test3@192.168.1.100:29418/test2.git目錄中多了名為test2的文件夾,這個就是我們的工程
注意:如果從ssh方式clone下來的工程,里面是自帶了hooks文件夾的,這個文件夾很重要!!如果不是用ssh://方式克隆下來的,還沒有這個文件夾,需要我們自己mkdir
2.提交
$ git add test.md $ git commit $ git push通過git push命令來推送
發(fā)現(xiàn)推送失敗了,提示的錯誤是:
Gerrit拒絕了我們直接提交到master的推送!
這就是我們在文章開頭提到的問題,我們需要push到refs/for/master那條線上!!
3. push到refs/for/master
解決:
在命令行寫入下面的命令:
意思是,當(dāng)執(zhí)行push命令時,將會推送到refs/for/當(dāng)前head所在的分支上。
重新進(jìn)行push,結(jié)果又報(bào)錯了。。
這次的錯誤是:
missing Change-Id in commit message footer
這個是提到的第2個問題,commit一定要有Change-Id
4. missing Change-Id in commit message footer
然后我們看到了命令行中給了我們提示,我們可以從hooks文件中拷貝commit-msg文件下來,這樣commit時,會自動幫我們生成Change-Id.
我們可以看一下 git rev-parse --git-dir就是指向的當(dāng)前git配置的文件,就是.git文件夾
所以我們直接用scp命令從gerrit服務(wù)器上拉取當(dāng)前用戶的hooks文件。
然后我們重新push發(fā)現(xiàn)一樣的錯誤,因?yàn)槲覀冞€停留在上次commit,上次的commit是沒有生成Change-Id的!
我們回退一下,然后重新提交。
回退命令是先用git log找到上一次的commit id, 然后用
可以看到提交到的分支是refs/for/master
總結(jié)
以上是生活随笔為你收集整理的Gerrit 工作流程及简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.io.IOException:
- 下一篇: Fcitx使用搜狗词库与皮肤