Repo 的使用形式如下:
repo <COMMAND> <OPTIONS>
可選元素顯示在方括號(hào)[]里面。例如,許多命令接受的項(xiàng)目列表作為參數(shù)。您可以指定項(xiàng)目列表作為名稱列表或本地源目錄的路徑列表:
repo sync [<PROJECT0> <PROJECT1> <PROJECTN>]
repo sync [</PATH/TO/PROJECT0> ... </PATH/TO/PROJECTN>]
一旦 Repo 被安裝,你可以找到總結(jié)所有命令的最新的文檔,運(yùn)行:
repo help
在 Repo 目錄中運(yùn)行如下這個(gè),你可以獲得任何命令的信息:
repo help <COMMAND>
$ repo init -u <URL> [<OPTIONS>]
在當(dāng)前目錄下安裝 Repo。這會(huì)產(chǎn)生一個(gè) .repo/ 目錄,目錄包括裝 Repo 源代碼和標(biāo)準(zhǔn) Android 清單文件的 Git 倉庫。.repo/ 目錄還包括 manifest.xml,是一個(gè)在 .repo/manifests/ 目錄選擇清單的符號(hào)鏈接。
選項(xiàng):
-u:指定一個(gè)恢復(fù)清單倉庫的地址(URL)。常見的清單可以在 https://android.googlesource.com/platform/manifest 找到。-m:在倉庫里選擇一個(gè)清單文件。如果沒有清單名稱,那么默認(rèn)是 default.xml。-b:指定一個(gè)修正,例如,一個(gè)特殊的清單分支(manifest-branch)。注意:所有剩余的 Repo 命令,在當(dāng)前工作目錄下必須是
.repo/的父目錄或是一個(gè)父目錄的子目錄。
repo sync [<PROJECT_LIST>]
下載新的更改,更新在你本地環(huán)境中的工作文件。如果你不帶參數(shù)運(yùn)行 repo sync,它將同步所有項(xiàng)目的文件。
當(dāng)你運(yùn)行 repo sync,將會(huì)發(fā)生:
repo sync 相當(dāng)于 git clone。在遠(yuǎn)程倉庫的所有分支都被復(fù)制到本地項(xiàng)目目錄。如果項(xiàng)目曾經(jīng)已經(jīng)被同步過,那么 repo sync 相當(dāng)于:
git remote update
git rebase origin/<BRANCH>
<BRANCH> 是本地項(xiàng)目目錄中的當(dāng)前檢查的分支。如果本地分支不跟蹤遠(yuǎn)程倉庫的分支,那么沒有同步發(fā)生的項(xiàng)目。
git rebase ——continue)去解決這個(gè)沖突。一個(gè)成功的 repo sync 之后,指定項(xiàng)目中的代碼將和最新的代碼留在遠(yuǎn)程倉庫中。
選項(xiàng):
-d:切換指定項(xiàng)目回到清單修正。如果該項(xiàng)目目前是一個(gè)主題分支那就有幫助,但清單修正是暫時(shí)需要。-s:同步到一個(gè)已知的構(gòu)建 manifest-server 在當(dāng)前清單指定的元素。 -f:繼續(xù)同步其他項(xiàng)目,即使有項(xiàng)目同步失敗。repo upload [<PROJECT_LIST>]
在指定的項(xiàng)目中,Repo 把本地分支的更新比作遠(yuǎn)程分支在最后一次 Repo 同步。Repo 會(huì)提示你選擇一個(gè)或更多尚未上傳審查的分支。
你選擇一個(gè)或更多分支時(shí),選到的分支上所有的 commits 會(huì)通過 HTTPS 連接傳送到 Gerrit。你將需要配置一個(gè) HTTPS 密碼去啟用上傳授權(quán)。查看 密碼生成器 生成新的用戶名/密碼配對(duì)去使用 HTTPS。
當(dāng) Gerrit 在它的服務(wù)器接收到對(duì)象數(shù)據(jù)時(shí),它會(huì)把每個(gè) commit 轉(zhuǎn)變成更改,所以審閱者可以單獨(dú)的評(píng)論每條 commit。將幾條 “checkpoint” commits 一起合并到一條單個(gè)的 commit 上,然后在你運(yùn)行 repo upload 之前使用 git rebase -i 。
如果你不帶參數(shù)運(yùn)行 repo upload,它將搜索所有項(xiàng)目上傳的更改。
在更改(changes)上傳之后進(jìn)行編輯,你應(yīng)該使用一個(gè)類似 git rebase -i 或 git commit --amend 的工具去更新你的本地的 commits。你所有編輯完成之后:
在系列里的每個(gè) commit 的括號(hào)內(nèi)輸入 Gerrit 改變 ID:
# Replacing from branch foo
[ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific...
[ 2829 ] ec18b4ba Update proto client to support patch set replacments
# Insert change numbers in the brackets to add a new patch set.
# To create a new change record, leave the brackets empty.
上傳完成后,更改將會(huì)有一個(gè)額外的補(bǔ)丁集(Patch Set)。
repo diff [<PROJECT_LIST>]
在 commit 和工作目錄之間使用 git diff 顯示明顯差異的更改。
repo download <TARGET> <CHANGE>
從審查系統(tǒng)下載指定的更改,然后使它在你的項(xiàng)目的本地工作目錄中可用。
例如,下載 change 23823 到你的平臺(tái)/框架/基本目錄:
$ repo download platform/build 23823
一個(gè) repo sync 應(yīng)該可以有效地移除任何通過 repo download 恢復(fù)的 commit。或者,你可以檢查遠(yuǎn)程分支;例如,git checkout m/master。
注意:當(dāng)更改在 Gerrit 網(wǎng)絡(luò)上可見時(shí)和
repo download被所有用戶找到時(shí),期間,有一個(gè)輕微的鏡像滯后,因?yàn)閺?fù)制延遲存在于全世界所有的服務(wù)器。
repo forall [<PROJECT_LIST>] -c <COMMAND>
在每個(gè)項(xiàng)目中被給予的 shell 命令。如下的附加環(huán)境變量是通過 repo forall 才變得有效的:
REPO_PROJECT 設(shè)置項(xiàng)目唯一的名稱。REPO_PATH 是相對(duì)于客戶端 root 的路徑。REPO_REMOTE 是清單中遠(yuǎn)程系統(tǒng)的名稱。REPO_LREV 是清單中修訂本的名字,翻譯成一個(gè)本地跟蹤分支。如果你需要通過清單修正去本地執(zhí)行 git 命令的時(shí)候可以使用。REPO_RREV 是清單中修訂本的名字,正如在清單中所寫的那樣。選項(xiàng):
-c:執(zhí)行命令和參數(shù)。命令是通過 /bin/sh 評(píng)估的并且后面的任何參數(shù)就如 shell 位置的參數(shù)通過。-p:在指定命令的輸出前顯示項(xiàng)目標(biāo)題。這是通過綁定管道到命令的stdin,stdout,和 sterr 流,并且用管道輸送所有輸出量到一個(gè)連續(xù)的流,顯示在一個(gè)單一的頁面調(diào)度會(huì)話中。-v:顯示命令寫到 sterr 的信息。repo prune [<PROJECT_LIST>]
刪減(刪除)已經(jīng)合并的標(biāo)題。
repo start <BRANCH_NAME> [<PROJECT_LIST>]
一個(gè)新分支的發(fā)展,從清單中指定的修正開始的。
<BRANCH_NAME> 參數(shù)應(yīng)該提供一個(gè)更改的簡(jiǎn)短說明給你正在嘗試建立的項(xiàng)目。如果你不知道,那就考慮使用默認(rèn)名稱。
<PROJECT_LIST> 指定將要參與這個(gè)主題分支的項(xiàng)目。
注意:"." 是當(dāng)前工作目錄下的項(xiàng)目的一個(gè)方便的簡(jiǎn)寫。
repo status [<PROJECT_LIST>]
比較工作目錄和暫存區(qū)(索引),和這個(gè)分支(HEAD)在每個(gè)項(xiàng)目指定的最近一次提交。為每個(gè)不同于這三個(gè)狀態(tài)的文件展示一個(gè)摘要行。
運(yùn)行 repo status ,查看當(dāng)前分支的狀態(tài)。狀態(tài)信息將會(huì)在項(xiàng)目中列表出來。項(xiàng)目中的每個(gè)文件,兩個(gè)字母的代碼是經(jīng)常被使用的:
在第一列中,大寫字母表明了暫存區(qū)和最后一次提交狀態(tài)的差異。
| 字母 | 含義 | 描述 |
|---|---|---|
| - | 無變化 | 在 HEAD 和在索引中是一樣的 |
| A | 增加 | 不在 HEAD, 在索引 |
| M | 修改 | 在 HEAD, 在索引表示修改 |
| D | 刪除 | 在 HEAD, 不在索引 |
| R | 重命名 | 不在 HEAD, 在索引中改變路徑 |
| C | 復(fù)制 | 不在 HEAD, 在索引中復(fù)制另一份 |
| T | 改變模式 | 在 HEAD 和在索引中是一樣的內(nèi)容, 改變模式 |
| U | 拆分 | HEAD 和索引之間有沖突; 要求解決 |
在第二列中,一個(gè)小寫字母表明了工作目錄和索引的差異。
| 字母 | 含義 | 描述 |
|---|---|---|
| - | 新建/未知 | 不在索引, 在工作目錄 |
| m | 修改 | 在索引, 在工作目錄, 修改 |
| d | 刪除 | 在索引, 不在工作目錄 |