GitLab 與 Gerrit
相信大家看到這裡,會發現gitlab比gerrit多了許多功能,比如說Issues,Wiki等。我們從幾個方面對比下2者:
###開發風格:
gitlab的特點是一個人維繫一個分支。 gerrit的特點是一個團隊維繫一個分支。(這裡的分支對應一個業務需求)
###許可權管理:
gitlab提供了比較多的選擇,可以根據需要建立project,每個團隊可以根據自己的需求管理自己的代碼,方式更加的靈活。 gerrit比較單一,而且許可權配置比較複雜,往往都是要聯絡管理員做出修改,每個團隊很難做到對代碼的個人化管理。
###程式碼檢閱:
gitlab是以merge request作為一次review,merge request中可能包含多個 commit,如果review不通過也不需要發起另一次merge request。 gerrit是以commit作為一次review,由於changeId的存在,可以對一次commit反覆的進行review。如果task劃分的粒度夠細的話,並不會影響各個團隊的review習慣。
###團隊協作:
gitlab可以選擇公開代碼,團隊間可以看到互相的代碼,有利於團隊的協作。 gerrit由於許可權控制問題,只能在許可權範圍內公開代碼。
###資訊共用:
gitlab 可以提供issues,wiki等功能方便開發人員與使用者之間的溝通,並且gitlab可以無縫的與一些專案管理工具整合,比如:jira。 gerrit 這個方面比較欠缺。 gitlab每個項目都有自己的wiki,很方便查看。
###有關gitlab+gerrit+jenkins整合:
現在比較流行的CI系統,gitlab提供代碼查看功能,gerrit儲存真正得代碼,jenkins通過plugin發布 gerrit上的代碼。 這樣做沒有體現出gitlab的特點,而且由於gerrit的許可權問題,很多代碼無法放在gitlab上,gitlab淪為代碼查看工具,很多功能形同虛設。有關docker: 考慮到公司將使用docker技術,對於dockerfile存放等問題,gitlab比gerrit支援的更好(因為許可權,檔案查看的問題)。
###有關CI:
jenkins提供了plugin,可以通過從gitlab上拉取代碼直接部署(已測試成功,CA採用sshkey)。
###總結
gerrit作為Google管理安卓項目的版本管理工具還是有其優點的, 多部門之間的許可權隔離,強制review的機制都是其優點, 反觀gitlab作為github的開源版,遵循了一套開源的流程,比較符合大多數人得習慣。 所以,通過比較,推薦使用gitlab作為版本管理工具,並且不與gerrit做整合。