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