1. 程式人生 > >Gerrit常見問題解決

Gerrit常見問題解決

開發十年,就只剩下這套架構體系了! >>>   

由於要做程式碼稽核,公司部分專案從gitlab上遷移到了gerrit系統上,很多人在使用中會經常出現以下問題,這裡記錄下。

問題:從gitlab上克隆了程式碼,並且已經進行了修改提交,但是程式碼只能推送到gerrit上,這時候該怎麼辦呢?

操作方法

1.把專案工程下的.git/config檔案中的url的值修改為gerrit上的ssh地址; 


即把上圖中紅線標識部分改為下圖中紅線標識部分

2.見 缺少Change id 操作方法

問題:缺少Change 
在gerrit上克隆程式碼的時候,忘了選擇Clone with commit-msg hook,因此克隆下來的專案裡沒有生成changeid 的鉤子程式。但是此時克隆下來的程式碼已經進行了修改提交,推送到gerrit稽核時會發生缺少change id的錯誤,導致程式碼不能推到gerrit上。

如圖所示:

 
操作方法

此時可手動新增鉤子程式,並回退重新提交即可,操作如下:

1.把I:\Departments\Shanghai\SmartECU\Testing\Shared\TianQi目錄下的commit-msg程式複製到專案工程目錄的.git/hooks目錄下

2.回退提交,在git bash 執行命令:git reset –soft HEAD~n(有幾次提交n就為幾)

3.重新提交,在git bash執行命令:git commit -m “msg”,msg為提交說明資訊,此時重新提交後,觀察到會有change id 生成

4.推送到gerrit: 在git bash執行命令:git push origin HEAD:refs/for/遠端分支名

若不需要在gerrit上稽核,則不用進行以上操作,直接使用git push origin HEAD:refs/heads/遠端分支名推動即可。

問題:推送到gerrit上的change出現can not merge 
將對程式碼做的修改提交到gerrit系統上後,有時候會出現can not merge的情況,此時程式碼不能合併進入遠端倉庫,在Reviewing介面會如下圖所示:

這種情況出現的原有兩個:

1.提交的程式碼與遠端別人的提交(已經合入遠端倉庫)有衝突。

”’或者”’

2.修改的基礎落後於遠端倉庫中的程式碼,沒有更新到最新。

操作方法 
1. 此時先點選頁面上的rebase按鈕,並且在彈出的框裡勾選change parent revison。

 
 
2. 點選rebase。表示先rebase遠端最新的程式碼更新。

若此時仍然出現Cannot merge,則表示有衝突,解決方法如下:

1. 同步遠端最新的程式碼,在git bash中執行命令:git pull --rebase
2. 在所有衝突的檔案中,解決衝突。(請仔細看命令列的提示)
3. 重新提交程式碼,並保證與原始Change-Id一致: 在git bash 中執行命令: git commit --amend
4. 在出現的文字編輯器中,修改提交資訊。(若不需要修改就直接儲存按:q退出)
5. 再次推送到gerrit: git push origin HEAD:refs/for/遠端分支名
-----------------