Repo 可簡化多個存放區的工作,為 Git 提供補充功能。如要瞭解 Repo 與 Git 之間的關係,請參閱「原始碼控管工具」。如要進一步瞭解存放區,請參閱 存放區 README
Repo 用法採用以下格式:
repo command options
選用元素會顯示在方括號 [ ] 中。例如,許多指令會將 project-list 做為引數。您可以將 project-list 指定為名稱清單,或專案的本機來源目錄路徑清單:
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
幫助
repo help
提供 repo
指令的說明。您可以查看特定 Repo 指令的詳細資訊,瞭解該指令如何將指令指定為選項:
repo help command
舉例來說,下列指令會產生 init
指令的說明和選項清單:
repo help init
或者,如要只查看指令的可用選項清單,請執行以下指令:
repo command --help
例如:
repo init --help
init
repo init -u url [options]
在目前目錄中安裝 Repo。這個指令會建立 .repo/
目錄,其中包含 Repo 原始碼和標準 Android 資訊清單檔案的 Git 存放區。
選項:
-u
:指定要用來擷取資訊清單存放區的網址。一般資訊清單位於https://android.googlesource.com/platform/manifest
。-m
:選取存放區中的資訊清單檔案。如果未選取資訊清單名稱,預設值為default.xml
。-b
:指定修訂版本,也就是特定的 manifest-branch。
同步
repo sync [project-list]
下載新的變更,並更新本機環境中的工作檔案,基本上可在所有 Git 存放區中完成 git fetch
。如果您在沒有引數的情況下執行 repo sync
,系統會同步處理所有專案的檔案。
執行 repo sync
時,會發生下列情況:
如果專案從未同步處理,則
repo sync
等同於git clone
;遠端存放區中的所有分支都會複製到本機專案目錄。如果專案先前已同步處理,
repo sync
就等同於:git remote update git rebase origin/branch
其中 branch 是本機專案目錄中目前已簽出的分支版本。如果本機分支未追蹤遠端存放區中的分支,則不會為專案進行同步處理。
成功執行 repo sync
後,指定專案中的程式碼會更新,並與遠端存放區中的程式碼同步。
主要選項:
-c
:只從伺服器擷取目前的資訊清單分支。-d
:將指定專案切換回資訊清單修訂版本。如果專案位於主題分支,但暫時需要資訊清單修訂版本,這個選項就很實用。-f
:即使專案無法同步處理,也能繼續同步處理其他專案。threadcount
:將同步作業分散到各執行緒,以便更快完成。請確保不會讓機器過度負荷,保留一些 CPU 用於其他工作。如要查看可用的 CPU 數量,請先執行nproc --all
。-q
:抑制狀態訊息,以便靜默執行。-s
:同步至目前資訊清單中manifest-server
元素指定的已知良好版本。
如需更多選項,請執行 repo help sync
。
上傳
repo upload [project-list]
將變更上傳至審查伺服器。針對指定專案,Repo 會將本機分支與上次 Repo 同步時更新的遠端分支進行比較。Repo 會提示您選取一或多個尚未上傳供審查的分支。
接著,系統會透過 HTTPS 連線將所選分支的所有提交內容傳送至 Gerrit。您必須設定 HTTPS 密碼,才能啟用上傳授權。如要產生新的使用者名稱/密碼組合,以便透過 HTTPS 使用,請前往密碼產生器。
Gerrit 透過伺服器接收物件資料後,會將每個提交內容轉換為變更,方便審查人員對特定提交內容加註。如要將多個檢查點提交合併為單一提交,請在執行上傳作業前使用 git rebase -i
。
如果您在沒有引數的情況下執行 repo upload
,系統會搜尋所有專案,找出要上傳的變更。
如要在上傳後編輯變更,請使用 git rebase -i
或 git commit --amend
等工具更新本機提交內容。完成編輯後:
- 確認更新的分支是目前已簽出的分支。
- 使用
repo upload --replace PROJECT
開啟變更比對編輯器。 針對系列叢書中的每個提交,請在括號內輸入 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 replacements # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
上傳完成後,變更內容會新增一個修補程式集。
如果您只想上傳目前已檢出的 Git 分支,請使用 --current-branch
旗標 (或簡稱 --cbr
)。
對於相關變更,建議將所有 CL 放在同一個主題中。您可以在使用 --topic=TOPIC
上傳時新增主題名稱。或者,您也可以傳遞 -t
,將主題名稱設為與本機分支版本名稱相同。
diff
repo diff [project-list]
使用 git diff
顯示修訂版本與工作樹之間的未完成變更。
下載
repo download target change
從審查系統下載指定的變更,並在專案的本機工作目錄中提供。
例如,如要將 change 23823 下載至 platform/build
目錄:
repo download platform/build 23823
執行 repo sync
會移除透過 repo download
擷取的所有提交。或者,您也可以使用 git checkout m/main
檢查遠端分支。
forall
repo forall [project-list] -c command
在每個專案中執行指定的殼層指令。repo forall
提供下列額外的環境變數:
REPO_PROJECT
會設為專案的專屬名稱。REPO_PATH
是相對於用戶端根目錄的路徑。REPO_REMOTE
是資訊清單中的遠端系統名稱。REPO_LREV
是資訊清單中的修訂版本名稱,已轉譯為本機追蹤分支。如果您需要將資訊清單修訂版本傳遞至本機執行的 Git 指令,請使用這個變數。REPO_RREV
是資訊清單中的修訂版本名稱,與資訊清單中的名稱完全相同。
選項:
-c
:要執行的指令和引數。指令會透過/bin/sh
和任何引數進行評估,這些引數會在做為殼層位置參數傳遞後才進行評估。-p
:在指定指令的輸出內容前顯示專案標頭。方法是將管道繫結至指令的 stdin、stdout 和 sterr 串流,並將所有輸出內容管道至單一分頁器工作階段中顯示的連續串流。-v
:顯示指令寫入 stderr 的訊息。
修剪
repo prune [project-list]
刪除已合併的主題。
start
repo start branch-name [project-list]
從資訊清單中指定的修訂版本開始,開始開發新的分支。
BRANCH_NAME
引數會簡短說明您要對專案進行的變更。如果不知道,建議您使用名稱 default
。
project-list
引數會指定哪些專案參與這個主題分支。
status
repo status [project-list]
將工作樹狀結構與指定每個專案中的暫存區 (索引) 和這個分支 (HEAD) 的最新提交內容進行比較。針對這三種狀態之間有差異的每個檔案,顯示摘要行。
如要只查看目前分支的狀態,請執行 repo status .
。系統會依專案列出狀態資訊。專案中的每個檔案都會使用兩個字母代碼。
在第一欄中,大寫字母會指出前台區域與上次提交的狀態有何不同。
Letter | 意義 | 說明 |
---|---|---|
- | 沒有變化 | HEAD 和索引中的內容相同 |
A | 已新增 | 不在 HEAD 中,而是在索引中 |
M | 上次修改日期 | 在 HEAD 中,在索引中修改 |
D | 已刪除 | 位於 HEAD 中,不在索引中 |
R | 已重新命名 | 不在 HEAD 中,索引中的路徑已變更 |
C | 已複製 | 不在 HEAD 中,而是從索引中的其他項目複製而來 |
T | 模式已變更 | HEAD 和索引中的內容相同,但模式已變更 |
更新 | 未合併 | HEAD 與索引之間的衝突;需要解決 |
在第二欄中,小寫字母會指出工作目錄與索引的差異。
Letter | 意義 | 說明 |
---|---|---|
- | 新客戶/不明 | 不在索引中,但在工作樹狀結構中 |
分鐘 | 上次修改日期 | 在索引、工作樹狀結構中修改 |
d 鍵 | 已刪除 | 在索引中,不在工作樹狀結構中 |
處理存放區錯誤
git commit -a # Commit local changes first so they aren't lost. repo start branch-name # Start the branch git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start repo upload .
如果在工作階段開始時未執行 repo start
指令,就會顯示錯誤訊息 repo: error: no branches ready for upload
。如要復原,您可以檢查修訂版本 ID、啟動新的分支版本,然後進行合併。