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