repo的用法
注:repo只是google用Python腳本寫的調用git的一個腳本,主要是用來下載、管理Android項目的軟件倉庫。(也就是說,他是用來管理給git管理的一個個倉庫的)
1.下載repo的地址: http://android.git.kernel.org/repo,可以用以下二者之一來下載
repo curl http://android.git.kernel.org/repo > ~/bin/repo
下載完成后須修改repo的權限:
chmod a+x ~/bin/repo
2.用repo sync在抓取android source code的時候,會經常出現一些錯誤導致repo sync中斷,每次都要手動開始。
可以用如下的命令,來自動重復
$?=1; while [ $? -ne 0 ] do repo sync done
或者在.repo目錄下的manifest.xml里找到fetch屬性
改成
fetch= "git://Android.git.linaro.org/ "
再或者在.repo目錄下的manifest.xml里找到review屬性
改成
review="http://android-review.googlesource.com/"
(即將https改成http)
獲取幫助:
repo help [ command ] //顯示command的詳細的幫助信息內容
示例:
repo help init
來獲取repo init的其他用法
3.repo init -u URL
用以在當前目錄安裝repository,會在當前目錄創建一個目錄".repo" -u 參數指定一個URL,
從這個URL中取得repository的manifest文件。
示例:repo init -u git://android.git.kernel.org/platform/manifest.git
獲取的manifest文件放在.repo目錄中。命名為manifest.xml。這個文件的內容其實就是所有被git管理的倉庫的列表!
可以用-m 參數來選擇獲取repository中的某一個特定的manifest文件,如果不具體指定,那么表示為默認的manifest文件(default.xml)
repo init -u git://android.git.kernel.org/platform/manifest.git -m dalvik-plus.xml
(有諸多供我們選擇的manifest文件,所有的manifest文件都放在目錄.repo/manifests中,該目錄本身亦被git所管理,你可以cd進去看看)
可以用-b 參數來指定某個manifest分支。
repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
你會發現.repo/manifests是個被git管理的倉庫,這里放的是所有的manifest文件(*.xml),因為被git管理,固然有分支,-b可以切換到你想要的分支然后再
下載相關的xml文件,當然具體下載那個xml還要看-m參數了,所以如果你僅僅指定-b而沒有-m的話,就是下載-b指定分支下的default.xml文件
如果不指定-b參數,那么會默認使用master分支
4.repo sync [project-list]
下載最新本地工作文件,更新成功,這本地文件和repository中的代碼是一樣的。
可以指定需要更新的project,如果不指定任何參數,會同步整個所有的項目。
如果是第一次運行repo sync,則這個命令相當於git clone,會把repository中的所有內容都拷貝到本地。如果不是第一次運行repo sync,
則相當於git remote update; git rebase origin/branch .
repo sync會更新.repo下面的文件。如果在merge 的過程中出現沖突,這需要手動運行
git rebase --continue
5.repo update[ project-list ]
上傳修改的代碼,如果你本地的代碼有所修改,那么在運行repo sync的時候,會提示你上傳修改的代碼,
所有修改的代碼分支會上傳到Gerrit (基於web的代碼review 系統), Gerrit受到上傳的代碼,會轉換為一個個變更,
從而可以讓人們來review 修改的代碼。
6. repo diff [ project-list ] --顯示提交的代碼和當前工作目錄代碼之間的差異。
7. repo download target revision --下載特定的修改版本到本地,
例如: repo download pltform/frameworks/base 1241 下載修改版本為1241的代碼
8. repo start newbranchname . --創建新的branch分支。"." 代表當前工作的branch分支。
9. repo prune [project list] --刪除已經merge的project
10. repo foreach [ project-lists] -c command --對每一個project運行command命令
11. repo status --顯示project中每個倉庫的狀態
12. repo forall -c -- 遍歷所有的git倉庫,並在每個倉庫執行-c所指定的命令
示例:
repo init -u ssh://217.106.79.36:29418/feng/main.git repo sync repo forall -c "git reset --hard feng-201708212"
