日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gerrit 工作流程及简单使用

發布時間:2023/12/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gerrit 工作流程及简单使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Gerrit

Gerrit,一種開放源代碼的代碼審查軟件,使用網頁界面。利用網頁瀏覽器,同一個團隊的軟件開發者,可以相互審閱彼此修改后的代碼,決定是否能夠提交,回退或是繼續修改。它使用版本控制系統Git作為底層。[1]

1.1 Gerrit和Gitlab區別

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,很方便查看。

參考:
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,當我們git add --> git commit --> git push 之后,你的代碼會被直接提交到repo,也就是代碼倉庫中,就是圖中橘紅色箭頭指示的那樣。

Gerrit流程:
----》程序員寫代碼
----》push到gerrit服務器
----》審核人員,在web頁面進行代碼的審核(review),(可以單人審核,也可以邀請其他成員一同審核),
----》審核通過(approve)之后,
----》提交(submit)到代碼倉庫(repo)中去。

在使用過程中,有兩點需要特別注意下:

  • 當進行commit時,必須要生成一個Change-Id,否則,push到gerrit服務器時,會收到一個錯誤提醒。
  • 提交者不能直接把代碼推到遠程的master主線(或者其他遠程分支)上去。這樣就相當于越過了gerrit了。 gerrit必須依賴于一個refs/for/*的分支。
    假如我們遠程只有一個master主線,那么只有當你的代碼被提交到refs/for/master分支時,gerrit才會知道,我收到了一個需要審核的代碼推送,需要通知審核員來審核代碼了。
  • 當審核通過之后,gerrit會自動將這條分支合并到master主線上,然后郵件通知相關成員,master分支有更新,需要的成員再去pull就好了。

    3.使用

    1.用戶clone工程

    在命令行執行下面的命令,就可以把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命令來推送

    發現推送失敗了,提示的錯誤是:

    You are not allowed to perform this operation [remote rejected] master -> master (prohibited by Gerrit)

    Gerrit拒絕了我們直接提交到master的推送!

    這就是我們在文章開頭提到的問題,我們需要push到refs/for/master那條線上!!

    3. push到refs/for/master

    解決:
    在命令行寫入下面的命令:

    $ git config remote.origin.push refs/heads/*:refs/for/*

    意思是,當執行push命令時,將會推送到refs/for/當前head所在的分支上。

    重新進行push,結果又報錯了。。
    這次的錯誤是:
    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就是指向的當前git配置的文件,就是.git文件夾
    所以我們直接用scp命令從gerrit服務器上拉取當前用戶的hooks文件。

    $ scp -p -P 29418 test3@192.168.1.100:hooks/commit-msg .git/hooks/

    然后我們重新push發現一樣的錯誤,因為我們還停留在上次commit,上次的commit是沒有生成Change-Id的!

    我們回退一下,然后重新提交。
    回退命令是先用git log找到上一次的commit id, 然后用

    git reset --hard commitId

    可以看到提交到的分支是refs/for/master

    總結

    以上是生活随笔為你收集整理的Gerrit 工作流程及简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。