GIT,GERRIT,REPO的使用教程

  • 2019 年 10 月 6 日
  • 筆記

Git、Gerrit、Repo使用

三者各自功能

gii,版本管理庫,在git庫中沒有中心伺服器的概念,真正的分散式。

repo,repo就是多個git庫的管理工具。如果是多個git庫同時管理,可以使用repo。當然使用gerrit,就必須用repo。

gerrit,提交審核程式碼,圖形化的介面,簡單的操作

使用三者管理程式碼流程

repo init xxx初始化

repo sync xxx同步要改動的項目

在該項目下面repo start xxx新建一個本地分支

做好改動以後git commit本地提交改動

repo upload xxx將改動上傳,等別人通過gerrit review

review如果有需要改動的地方,那本地改好後,git commit –amend來保存新的修改

repo upload 將新的改動上傳

重複5-7步,直到review通過,然後merge改動,完畢

Git 基礎操作

git add 文件名將當前更改或者新增的文件加入到Git的索引中

eg:git add readme.txt

git commit提交當前工作空間的修改內容,,提交的時候必須用-m來輸入一條提交資訊

eg:git commit -m "add model"

git status 倉庫當前的狀態

eg :git status

git diff 命令

eg:git diff 比較的是工作目錄(Working tree)和暫存區域快照(index)之間的差異,即修改之後還沒有暫存起來的變化內容。

eg:git diff master..test 顯示兩個分支間的差異

eg : git diff master…test 『master』,『test』的共有 父分支和』test』分支之間的差異

eg: git diff –stat 統計那些文件被改動

git log 顯示最近提交日誌

eg:git log 如果需要一行顯示 git log –pretty=oneline

git reset 版本回退

eg:git reset –hard HEAD~X 會退到之前X版本

如果回退之後還想回來,可以使用

eg:git reset –hard "commit ID"

ID可以使用

eg:git reflog 查看歷史命令獲得ID

git checkout — file 丟棄工作區修改,撤銷修改到最近一次 git commit or git add,即用版本庫里的版本替換工作區的版本

eg: git checkout — readme.txt 註:不要遺忘 –

git rm 刪除版本庫中文件

eg: git rm 刪除本地版本庫文件,再使用 git commit 提交

git checkout -b "xxx" 創建一個分支

eg:git checkout -b dev 創建dev分支並切換到dev分支,相當於

git branch dev 創建dev分支

git checkout dev 切換到dev分支

git branch -d dev 刪除dev分支

git checkout . “#本地所有修改的。沒有的提交的,都返回到原來的狀態

git branch 命令會列出所有分支,並在當前分支上標*

git merge 合併指定分支到當前分支

eg: git merge dev 把dev分支合併到master分支上

git log –graph可以看到分支合併圖,如果git無法合併,必須先解決衝突才能提交。

git stash 儲藏當前工作現場,創建新分支修改緊急任務

git stash 隱藏當前工作區

git checkout master 切換到master分支

git checkout -b issue 新建分支

解決完,並提交後

git checkout dev 切回到以前工作分支

git stash list 查看隱藏工作區

git stash pop 恢復當前儲藏的工作區

添加新功能最好新建feature分支,在上面開發,合併

git pull 從其他的版本庫(既可以是遠程的也可以是本地的)將程式碼更新到本地

eg:git pull origin master origin版本庫的程式碼更新到本地的master主枝

git push:將本地commit的程式碼更新到遠程版本庫中

eg:git push origin git push localbranch master:refs/for/master 將本地的程式碼更新到orgin的遠程版本庫中

git checkout HEAD <some file> [<some file>],清除工作目錄樹中的修改

打修補程式

將commit打包成patch

修改程式碼

$ vi drivers/bluetooth/btusb.c

把程式碼添加到git管理倉庫

git add .

提交修改

git commit -m "some message"

查看日誌,獲取到hash

git log

生成patch

git format-patch -s 1bbe3c8c19

或者–

git format-patch HEAD^ # 最近的1次commit的patch

測試,應用patch

檢查patch文件

git apply –stat xxx.patch

查看是否能應用成功

git apply –check xxx.patch

應用patch

git am xxx.patch

註:1. 之前應,git am -abort 放棄之前am資訊, 有可能會遇到 .git/rebase-apply still exists but mbox given

修改以及commit並且以及push的描述

修改最近一次的commit

git commit –amend

修改commit歷史,

git rebase -i HEAD~X or git rebase -i (commit -id)接著會出現

pick:*******

pick:*******

pick:*******ls

將pick改為edit就可以修改,利用`git commit –amend命令

最後git rebase –continue 搞定

如果需要刪除已經push的可以將pick改為drop

Repo

repo擔任角色

和主程式碼伺服器交互

用manifest.xml管理多個git倉庫

repo init -u url -b branchname 初始化命令,主要干兩件事

在當前目錄裡面下載安裝 repo,因為最初從網上下載的那個 repo 文件並不是一個完整的 repo,它主要負責初始化工作,並且在初始化完成以後將命令移交給完整的 repo 來執行

根據命令中指定的地址(-u url)去下載項目的管理文件 manifest.xml ,這裡 -b branchname 就是指的 manifest.xml 的相應 branch

repo sync 同步所有項目

repo sync project 主要乾的事情是

同步 .repo/manifests/,再根據最新的manifest.xml來執行操作

找到想要下載項目,然後下載項目

repo start branch project

如果希望這個 branch 是被 repo 管理起來的,那麼我們就要使用 repo start 命令來新建一個 branch。

比如這個 branch 改好了後,你是需要上傳到 gerrit 進行 review,那麼就該使用 repo start。

如果只是一個臨時實驗性的分支的話,就無所謂了。但是使用 repo start也不會有什麼壞處,所以放心的使用。

如果創建失敗,可以使用 repo start branch project –all

刪除 branch 的時候,依然是使用 git branch -d branchname

repo upload project

當準備好一個 commit 以後,就需要把這個改動傳到 gerrit 上面等待別人 review,就需要用到 repo upload ,如果branch不是repo start 創建,就必須使用repo start 創建新的branch,再使用git cherry-pick commitd把剛才改動好的拿到repo創建的分支

repo forall -c git reset –hard HEAD

repo forall -p =c git branch

repo branches 查看當前有多少分支

Gerrit

Review流程

上傳程式碼

reviewer review 當change +2 就可以merge ,但是在+2之前,先有普通reviewer查看+1,以減輕主reviewer負擔

verify:可以人工完成,也可以用自動化工具,如自動化編譯,自動化測試

merge:通過review之後,就可以merge change,保存到中心程式碼倉庫。如果程式碼有衝突,需要手動處理再重新上傳

從 gerrit 上面下載一個正在 review 的 change

有時候,需要將一個還沒有merge 的 change 下載下來,這時,可以到一個 change 的頁面,裡面有 download 的地方,裡面有很多下載選項。其中 cherry-pick 是比較常用的方式,你選了下載方式後,gerrit 會智慧的生成相應的命令,只需要複製下來,然後在項目目錄下面執行這個命令就可以了。

比較不同的 patch set

每個 change 通常需要重複「review – 改程式碼 – 上傳新 patch」多次才能最終完成,每一次上傳就稱為一個 patch。gerrit 會方便的把你的改動內容列出來方便 review,而且你還可以選擇比較不同的 patch set,在一個change 的頁面,仔細看看還是比較容易找到地方。

查找 change

gerrit 在頁面右上角有一個搜索框,通過搜索匹配,你可以找到你想要的 change。比如 owner,project,status,branch 等等。比如:

status:open project:xxx

owener:」xxxxx