什么是Gerrit
Gerrit 是一個基于 web 的代碼評審工具, 它基于 git 版本控制系統(tǒng)蛇耀。Gerrit 旨在提供一個輕量級框架, 用于在代碼入庫之前對每個提交進行審閱。更改將上載到 Gerrit, 但實際上并不成為項目的一部分, 直到它們被審閱和接受。它是標(biāo)準(zhǔn)開源過程的一個簡單工具來支持提交補丁程序, 然后由項目成員在應(yīng)用到代碼庫之前進行評審甩挫。
1.配置sshkey
生成 SSH Key:
ssh-keygen -t rsa -C "xxxx@xxx.com"
輸入命令獲取公鑰椿争,然后添加入sshKey。
/* macOS 系統(tǒng) */
pbcopy < ~/.ssh/id_rsa.pub
/* windows 系統(tǒng) */
clip < ~/.ssh/id_rsa.pub
2.clone代碼
進入gerrit的項目代碼倉庫下,有如下兩種clone方式莺葫,帶有hook的是有提交代碼遠(yuǎn)程路徑的,不帶hook的是沒有遠(yuǎn)程倉庫路徑的枪眉,這里當(dāng)然要選擇帶hook的(下載的時候需要連同hooks鉤子腳本)捺檬。
3.提交代碼
- 首先肯定是add和commit。
git add .
git commit -m ""
- 使用同一個change ID重新提交:
change ID的作用就是用來識別不同的codeReview贸铜。git commit --amend命令可以把這次commit的信息與上次的commit合并起來堡纬。
git commit --amend
可用鍵盤上下鍵轉(zhuǎn)到描述所在的那一行聂受,然后進行修改,在代碼命令中鍵入 :wq(保存并退出)烤镐,使這次commit生效蛋济。
4.推送代碼
如果還用git push origin 分支名,那這里會報not permitted炮叶,當(dāng)然是因為gerrit不允許直接將本地修改同步到遠(yuǎn)程倉庫碗旅。開發(fā)者必須先push到遠(yuǎn)程倉庫的refs/for/*分支上,等待codeReview镜悉。
- 而應(yīng)該使用如下命令推送:
git push origin HEAD:refs/for/branchxxx
5.在線編輯功能
-
可以在gerrit上修改commit message祟辟。
6.代碼審核
-
然后就會在gerrit上生成一個代碼審核的Change-Id,進入這個鏈接侣肄。
-
然后添加2個codeReview人員進行+1+2(審核)旧困,完成之后再需要+verify,然后submit就可以入庫稼锅。
-
將功能代碼推到其他分支:
在gerrit上可以直接選擇要cherry pick的分支吼具,將代碼cp到其他分支,或者切到某個分支使用download patch的命令來cherry pick到本地矩距。
-
Abandon
如果代碼因為merge沖突或者是不符合審核規(guī)則馍悟,可以在gerrit頁面進行abandon處理,此時遠(yuǎn)程倉庫拒絕代碼合入,也就是遠(yuǎn)程倉庫沒有你的提交。
rebase
更改當(dāng)前提交的parent剩晴,當(dāng)執(zhí)行rebase操作時锣咒,git會從兩個分支的共同祖先開始提取待變基分支上的修改,然后將待變基分支指向基分支的最新提交赞弥,最后將剛才提取的修改應(yīng)用到基分支的最新提交的后面毅整。
- 撤銷提交:git reset
git reset --hard : 回退版本庫,暫存區(qū)绽左,工作區(qū)悼嫉。
git reset --mixed: 回退版本庫,暫存區(qū)拼窥。
git reset --soft: 回退版本庫戏蔑。
問題總結(jié):
- git clone下載下來的庫,文件夾里試空的鲁纠。只把一些配置文件下載了总棵,源碼都沒有下載,但是項目大小卻是正確的改含。
處理:需要checkout一下分支文件就會出現(xiàn)情龄。
2.remote: commit fe0f5b0: warning: subject >50 characters; use shorter first paragraph
處理:提交的信息太多,不應(yīng)該大于50個長度,reset后重新提交骤视。
3.推代碼時報了fatal: remote error: Service not enabled
處理:打開項目下.git/config這個隱藏文件鞍爱,打開之后添加pushurl = xxx這個,沒有的可去同事那里copy专酗,就有推代碼的權(quán)限了睹逃。
[remote "origin"]
url = ssh://xxx
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = xxx
4.gerrit推代碼遇到?jīng)_突
gerrti推代碼之前,首先需要用git pull rebase祷肯,拉最新代碼唯卖,并且將自己代碼作為最新節(jié)點。沒有沖突就直接push躬柬,有沖突拜轨,先解決沖突,再提交推上去允青。