Gerrit-使用指南

涉及到的基本操作

  1. 登錄 gerrit
  2. 激活郵箱
  3. 獲取 http Credentials
  4. 拉取代碼
  5. 提交代碼
  6. Review & Verify & Submit

初次使用

登錄 gerrit -> 激活郵箱 -> 獲取并保存 http credentials(提交時要用)

激活郵箱

后續(xù) Push, Review, Verify, Submit, 接收通知 等都需要郵箱的支持减余。

  1. 登錄 -> 進入 Settings -> Email Addresses;
  2. 輸入郵箱地址 xxx@xxx.com, Click “Send VERIFICATION” button 發(fā)送驗證郵件;
  3. 接收郵件 訪問 驗證鏈接;
  4. done.
Settings_Gerrit_email png.png

獲取 Http credentials

http 方式 Pull, Push 時用篱瞎。

  1. 登錄 gerrit -> 進入 Settings -> HTTP Credentials;
  2. 點擊 "GENERATE NEW PASSWORD" Button 獲取 password;
  3. done.


    gerrit_http_credentials.png

開發(fā)

Pull -> Commit -> Push(帶上Change-Id)

拉取代碼

BROWSE -> Repositories。

倉庫地址在倉庫詳情頁盾碗。

Attention

Pull 時選擇 "Clone with commit-msg hook" 方式以便 拿到 commit-msg (.git/hooks/commit-msg) 。

  • Http 方式;
  • ssh 方式;

提交代碼

確保 commit footer 有 Change-Id 信息措嵌。

Change-Id 可從通過 commit-msg (.git/hooks/commit-msg) 生成骏令。

Strongly recommended:
只需確保項目目錄(.git/hooks/)下有 commit-msg 腳本,再配合對應(yīng) 的 gerrit 插件即可在 Commit 時完成 Change-Id 的自動生成厉亏。

Idea, Eclipse 都有相應(yīng)的 gerrit 插件董习。

Change-Id

用于標(biāo)識 commit。

Have a look

Parent:     65c50d48 (Update Dockerfile base image to 0.1.2)
Author:     xxxx <xxxxx@qq.com>
AuthorDate: 2019-12-12 17:41:51 +0800
Commit:     xxxx <xxxxx@qq.com>
CommitDate: 2019-12-12 17:41:51 +0800

add readme.md;

Change-Id: Iba58fbc6a1a440a9d3e2e48bbd72f898ba3cabc0

Review

Review & Verify & Submit

YOUR -> Changes -> 選擇對應(yīng)的 Change -> REPLY;

gerrit_reply.png
  1. 添加接收者爱只,抄送者皿淋,評論,并對 Code-Review, Verified(若有權(quán)限) 打分。

  2. 若 Code-Review Verified 對應(yīng)的分?jǐn)?shù)均符合 Sumbmit 要求窝趣,
    則 當(dāng)前Change 狀態(tài)變?yōu)?Ready to submit, 放出 Sumbim 按鈕疯暑。

  3. 點擊 Submit 按鈕 完成 變更往 gerrit 倉庫 master 分支的提交。

Git 知識準(zhǔn)備

對于一些進階操作或部分問題的處理哑舒,要求對 git 有一定的程度的深入了解妇拯。

rebase & merge

rebase(變基), merge

  • 共同點:都有整合代碼的功能
  • 異同:merge操作會生成一個新的節(jié)點(commit)來承載這次整合,之前的提交分開顯示洗鸵。而rebase操作不會生成新的節(jié)點(整合在原有的commit 上完成)乖阵,是將兩個分支融合成一個線性的提交。

git commit --amend

對前一次 commit 進行微調(diào)(打補丁)预麸,不產(chǎn)生新的 Commit瞪浸。

git commit –amend [options]

fetch vs pull

可簡單理解為: pull = fetch + merge

git reset

  • reset --soft

    Does not touch the index file or the working tree at all (but resets the head to <commit>, just like all modes do). This leaves all your changed files "Changes to be committed", as git status would put it.

    重置 HEAD 和 branch 時,保留工作目錄和暫存區(qū)中的內(nèi)容吏祸,并把重置 HEAD 所帶來的新的差異放進暫存區(qū)对蒲。

  • reset --mixed

    Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.

    reset 默認(rèn)參數(shù) mixed。重置 HEAD 和branch的同時贡翘,保留工作目錄蹈矮,并且清空暫存區(qū),并把重置 HEAD 所帶來的新的差異放在工作目錄鸣驱。

  • reset --hard

    Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.

    重置 HEAD 和branch的同時泛鸟,重置stage區(qū)和工作目錄里的內(nèi)容

參考文檔 git reset

Caution

  • 應(yīng)總是確保 Commit 有對應(yīng)的 Change-Id
  • 盡量采用 rebase 方式合并代碼, 而非 merge 方式

Problems

一些常見的問題及對應(yīng)的解決方案。

初次使用 Push 時遇到 鑒權(quán)失敗

  1. 首先應(yīng)確保 gerrit 賬戶名無誤踊东;
  2. 檢查 Push 密碼 是否為 Http Credentials北滥;

初次使用 Push 時遇到 remote rejected

此種情況多是由于 本地 git 配置 name, email 與 gerrit 賬戶名, 注冊郵箱不符。

解決方案:查看并修改 git 配置屬性 name, email

# 查看 git 配置
git config --list
# 修改 name 屬性
git config -- global user.name '<gerrit_user_name>'
# 修改 email 屬性
git config -- global user.email '<gerrit_registered_email>'
# 兩次檢查 git 配置... done.
git config --list

ref update failed: REJECTED_OTHER_REASON no new changes

問題分析

這個提示表示沒有新的提交闸翅。Gerrit審核根據(jù)commit
id和changeId來判斷是否是新的提交再芋。

情況一:如果確實需要提交,比如在初次建立新的分支的時候坚冀,兩個分支的內(nèi)容完全一模一樣

解決辦法:
通過git commit –amend生成新的changeId济赎。

情況二: 合并時,合并的那些歷史的 commit 節(jié)點记某,在 gerrit 上都已經(jīng)評審過了司训,都是已有的 change 單,所以 gerrit 認(rèn)為沒有新的提交液南,就不讓你提交評審壳猜。

解決辦法:
在 git merge 的時候,加上 --no-ff 參數(shù)贺拣,是為了讓它生成一個新的 commit蓖谢,這樣就可以提交了~(不過生成的 gerrit change 是看不到改動信息的

結(jié)合 Idea gerrit 插件的使用:

  1. 合并時勾選 "No fast forward" 選項;
  2. Push 時,不勾選 "Push to Gerrit" 選項;
Select-No-fast-forward.png
No-Push-to-Gerrit.png

because ref update failed: REJECTED_OTHER_REASON commit ff9671c: missing Change-Id in message footer

解決辦法:

  1. 通過git commit –amend 生成新的changeId (推薦)譬涡;
  2. reset 到上一次 Commit, 生成新的changeId闪幽,重新提交;

One or more refs/for/ names blocks change upload The remote end hung up unexpectedly

問題描述:相應(yīng)分支掛起(可簡單理解為分支狀態(tài)異常)

解決方案:

在對應(yīng)倉庫下執(zhí)行以下命令

git for-each-ref refs/for
# 如果第一條命令執(zhí)行完后有輸出涡匀,再執(zhí)行下面的命令盯腌。
for n in $(git for-each-ref --format='%(refname)' refs/for);do git update-ref -d $n; done

! [remote rejected] master -> refs/for/master (you are not allowed to upload merges)

git stash
# 每次 push 前通過 rebase 方式拉代碼
git pull --rebase
git push
git stash pop

Gerrit 提示沖突,不能合并代碼(git解決遠(yuǎn)程沖突)

  1. 將存在沖突的 Change Abandon(丟棄)
  2. 在本地處理好沖突(rebase/merge)再提交

以下是 rebase 方式(推薦)

## rebase 方式
git branch   #查看分支情況
git checkout master  #選擇分支
git fetch origin  #fetch與pull的區(qū)別,自己再搜吧~
git rebase origin/master  #查看有“CONFLICT (content): ”的地方陨瘩,手工解決沖突后腕够,下一步
git add dev/controller/web/index.php #這只是一個舉例,即要先add操作
git rebase --continue
git push origin HEAD:refs/for/master    #OK了

項目管理

遷移舊項目

以 gitlab 為例舌劳。

以管理員身份登錄 gerrit -> 創(chuàng)建項目倉庫 repo_demo -> 進入 gerrit_home/<git_dir> 以 gitlab 中同名項目覆蓋之(即刪除 repo_demo
-> 再從 gitlab 克隆同名項目)

# 刪除 repo_demo
rm -rf repo_demo
# 從 git 倉庫全量克隆同名項目
git clone --mirror <repo_url>
# 若 gitlab 倉庫代碼有更新則 再全量拉取一次 即可
git fetch --all
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帚湘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甚淡,更是在濱河造成了極大的恐慌大诸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贯卦,死亡現(xiàn)場離奇詭異资柔,居然都是意外死亡,警方通過查閱死者的電腦和手機撵割,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門贿堰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啡彬,你說我怎么就攤上這事羹与。” “怎么了庶灿?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵注簿,是天一觀的道長。 經(jīng)常有香客問我跳仿,道長诡渴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任菲语,我火速辦了婚禮妄辩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘山上。我一直安慰自己眼耀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布佩憾。 她就那樣靜靜地躺著哮伟,像睡著了一般干花。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上楞黄,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天池凄,我揣著相機與錄音,去河邊找鬼鬼廓。 笑死肿仑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碎税。 我是一名探鬼主播尤慰,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雷蹂!你這毒婦竟也來了伟端?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤匪煌,失蹤者是張志新(化名)和其女友劉穎荔泳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虐杯,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡玛歌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了擎椰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片支子。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖达舒,靈堂內(nèi)的尸體忽然破棺而出值朋,到底是詐尸還是另有隱情,我是刑警寧澤巩搏,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布昨登,位于F島的核電站,受9級特大地震影響贯底,放射性物質(zhì)發(fā)生泄漏丰辣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一禽捆、第九天 我趴在偏房一處隱蔽的房頂上張望笙什。 院中可真熱鬧,春花似錦胚想、人聲如沸琐凭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽统屈。三九已至胚吁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愁憔,已是汗流浹背腕扶。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惩淳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓乓搬,卻偏偏與公主長得像思犁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子进肯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容