Repo是一個用Python語言開發的命令工作 ,可以更文件地進行多版本庫的管理。Repo是對Git進行了一定的封裝,簡化了對多個Git版本庫的管理。對於repo管理的任何一個版本庫,都需要使用Git命令進行操作。
Repo的使用過程大致如下:
-
運行repo init命令,克隆Android的一個清單庫。這個清單庫是通過XML技術建立的版本庫清單。
-
清單庫中的manifest.xml文件,列出了200多個版本庫的克隆方式。包括版本庫的地址和工作區地址的對應關係,以及分支的對應關係。
-
運行repo sync命令,開始同步,即分別克隆這200多個版本庫到本地的工作區中。
-
同時對200多個版本庫執行切換分支操作,切換到某個分支。
Repo和清單庫的初始化
-
建立一個工作目錄,在工作目錄中執行repo init -u <url>,完成repo完整的下載及項目清單版本庫(manifest.git)的下載。
-
命令repo init要完成如下操作:
-
完成repo這一工作的完整下載,因爲在~/bin/下是repo不過是repo的引導程序。
-
克隆android的清單庫manifest.git(地址來自於-u參數)。
-
克隆的清單庫拉於.repo/manifest.git中,本地克隆到.repo/manifests。清單文件.repo/manifest.xml只是符號鏈接,它指向.repo/manifests/default.xml。
-
詢問用戶的姓名和郵件地址,如果和Git默認的用戶名、郵件地址不同,則記錄在.repo/manifest.git庫的config文件中
-
如果不想用默認的URL地址獲取repo,可以在repo init子命令中加–repo-url參數指定repo的版本庫地址。
Repo的命令集
每一個repo子命令都可以通過下面的命令獲得幫助:
repo help <command>
repo init命令
repo init子命令主要完成檢出清單版本庫(manifest.git),以及配置Git用戶名和郵件地址的工作。
repo sync命令
repo sync子命令用於參照清單文件克隆可同步版本庫。如果某個項目版本庫尚不存在,則執行repo sync命令相當於執行git clone。如果項目版本庫已經存在,則相當於執行下面的兩個命令:
-
git remote update:相當於對每一個remote源執行fetch操作。
-
git rebase origin/branch:針對當前分支的跟蹤分支執行rebase操作。
repo start命令
repo start子命令實際上是對git checkout -b命令的封裝。爲指定的項目或所有項目(若使用-all參數),以清單文件中爲項目認定的分支或里程碑爲基礎,創建特性分支。特性分支的名稱由命令的第一個參數指定。
repo start <newbranchname> [--all | <project>…]
repo status命令
repo status子命令實際上是對git diff-index、git diff-files命令的封裝,同時顯示暫存區的狀態和本地文件修改的狀態。
repo status [<project>…]
repo checkout命令
repo checkout子命令實際上是對git checkout命令的封裝。檢出之前由repo start創建的分支。
repo checkout <branchname> [<project>…]
repo branches命令
repo branches讀取各個項目的分支列表並彙總顯示。
repo branches [<project>…]
repo upload命令
repo upload相當於git push,但是又有很大的不同。執行repo upload不是將版本庫改動推送到克隆時的遠程服務器,而是推送到代碼審查服務器(Gerrit)的特殊引用上。代碼審覈服務器會對推送的提交進行特處理,將新的提交顯示爲一個待審覈的修改集,並進入代碼審查流程。只有當審覈通過後,纔會合併到正式的版本庫中。
用法如下:
repo upload [--re --cc] [<project>]...
參數:
-h, --help 顯示幫助信息。 -t 發送本地分支名稱到Gerrit代碼審覈服務器。 --re=REVIEWERS, --reviewers=REVIEWERS 要求由指定的人員進行審覈。 -cc=CC 同時發送通知到如下郵件地址。
如果發現上傳後的代碼有問題想重新修改,可以在本地繼續修改代碼,用git add把修改內容加到暫存區,用git commit –amend修改上一次提交,再用repo upload重新上傳修訂集。這樣上傳後不會產生新的提交,而是會在原有的提交中新加一個修訂集。
repo download命令
repo download命令主要用於代碼審覈者下載和評估提交的修訂。使用repo download命令實際上就是用git fetch獲取到對應項目的refs/changes/<changeid>/patchset>引用,並自動切換到對應的引用上。
repo download {project change [/patchset]}…
repo prune命令
repo prune子命令實際上是對git branch -d命令封裝,該命令用於掃描項目的各個分支,並刪除已經合併的分支。
repo prune [<project>…]
repo 遍歷整個項目
— liangjiong.zhou 2013/12/31 03:12
repo forall 可以用來遍歷所有git倉庫。
repo forall <span class="re5">-c</span> <span class="kw3">command</span>
例:
$ repo forall <span class="re5">-c</span> <span class="kw2">git status</span> <span class="co0">#等同 repo status</span> $ repo forall <span class="re5">-c</span> <span class="kw2">git clean</span> <span class="re5">-dxf</span> <span class="co0">#清除整個repo</span>