Repo 命令詳解
使用 Repo 需遵循的格式如下:
repo command options
可選元素顯示在方括號 [ ] 中。例如,許多命令會用到項目列表 (project-list) 參數。項目列表可以是一個名稱列表,也可以是一個本地源代碼目錄的路徑列表:
repo sync [project0 project1 … projectn]
repo sync [/path/to/project0 … /path/to/projectn]
help
安裝 Repo 後,可以通過運行以下命令找到說明信息:
repo help
也可以通過在 Repo 樹中運行以下命令來獲取有關某個命令的信息:
repo help command
例如,以下命令會生成 Repo init 參數的說明和選項列表,該參數會在當前目錄中初始化 Repo(要了解詳情,請參閱 init)。
repo help init
init
在當前目錄中安裝 Repo。執行該命令後悔在當前目錄中創建一個 .repo/ 目錄,其中包含 Repo 源代碼和標準 Android 清單文件的 Git 代碼庫。該 .repo/ 目錄中還包含 manifest.xml,該文件是一個指向 .repo/manifests/ 目錄中所選清單的符號鏈接。
選項:
- -u:指定要從中檢索 manifest 版本庫的網址。
- -m:選擇代碼庫中的一個清單文件。如果未選擇任何清單名稱,則會默認選擇 default.xml。
- -b:指定修訂版本,即特定的 manifest 分支。
注意:對於其餘的所有 Repo 命令,當前工作目錄必須是 .repo/ 的父目錄或該父目錄的子目錄。
sync
repo sync [project-list]
下載新的更改並更新本地環境中的工作文件。如果您在未使用任何參數的情況下運行 repo sync,則該操作會同步所有項目的文件。
運行repo sync
後,將出現以下情況:
如果目標項目從未同步過,則repo sync
相當於git clone
。遠程代碼庫中的所有分支都會複製到本地項目目錄中。
如果目標項目以前同步過,則repo sync
相當於以下命令:
git remote update
git rebase origin/branch
其中branch
是本地項目目錄中當前已檢出的分支。如果本地分支沒有在跟蹤遠程代碼庫中的分支,則項目不會發生任何同步。
如果Git rebase
操作導致合併衝突,請使用常規Git
命令(例如git rebase --continue
)解決衝突。
repo sync
運行成功後,指定項目中的代碼即處於最新狀態,已與遠程代碼庫中的代碼同步。
選項:
- -d:將指定項目切換回清單修訂版本。如果項目當前屬於某個主題分支,但臨時需要清單修訂版本,則此選項會有所幫助。
- -s:同步到當前清單中的 manifest-server 元素指定的一個已知良好版本。
- -f:即使某個項目同步失敗,也繼續同步其他項目。
diff
repo diff [project-list]
使用git diff
顯示提交與工作樹之間的明顯更改。
forall
repo forall [project-list] -c command
在每個項目中運行指定的shell
命令。通過repo forall
可使用下列額外的環境變量:
REPO_PROJECT
設爲了項目的唯一名稱。
REPO_PATH
是相對於客戶端根目錄的路徑。
REPO_REMOTE
是清單中遠程系統的名稱。
REPO_LREV
是清單中修訂版本的名稱,已轉換爲本地跟蹤分支。如果您需要將清單修訂版本傳遞到某個本地運行的 Git 命令,則可使用此變量。
REPO_RREV
是清單中修訂版本的名稱,與清單中顯示的名稱完全一致。
選項:
- -c:要運行的命令和參數。此命令會通過 /bin/sh 進行評估,它之後的任何參數都將作爲 shell 位置參數傳遞。
- -p:在所指定命令的輸出結果之前顯示項目標頭。這通過以下方式實現:將管道綁定到命令的 stdin、stdout 和 sterr 流,然後通過管道將所有輸出結果傳輸到一個分頁會話中顯示的連續流中。
- -v:顯示該命令向 stderr 寫入的消息。
prune
repo prune [project-list]
刪減(刪除)已合併的主題。
start
repo start branch-name [project-list]
從清單中指定的修訂版本開始,創建一個新的分支進行開發。
branch-name
參數爲分支名,用於簡要說明您嘗試對項目進行的更改。如果您不知道,則不妨考慮使用名稱 default
。
project-list
參數指定了將參與此主題分支的項目。
status
repo status [project-list]
對於每個指定的項目,將工作樹與臨時區域(索引)以及此分支 (HEAD) 上的最近一次提交進行比較。在這三種狀態存在差異之處顯示每個文件的摘要行。
要僅查看當前分支的狀態,請運行repo status
。系統會按項目列出狀態信息。對於項目中的每個文件,系統使用兩個字母的代碼來表示:
在第一列中,大寫字母表示臨時區域與上次提交狀態之間的不同之處。
字母 | 含義 | 說明 |
---|---|---|
- | 沒有變化 | 在 HEAD 與索引中相同 |
A | 已添加 | 不存在於 HEAD 中,但存在於索引中 |
M | 已修改 | 存在於 HEAD 中,但索引中的文件已修改 |
D | 已刪除 | 存在於 HEAD 中,但不存在於索引中 |
R | 已重命名 | 不存在於 HEAD 中,索引中文件的路徑已更改 |
C | 已複製 | 不存在於 HEAD 中,複製自索引中的另一個文件 |
T | 模式已更改 | HEAD 與索引中的內容相同,但模式已更改 |
U | 未合併 | HEAD 與索引之間存在衝突,需要加以解決 |