存放區指令參考資料

存放區可簡化多個存放區的工作,與 Git 相輔相成。如需 Repo 和 Git 之間的關係說明,請參閱原始碼控制工具。如要進一步瞭解存放區,請參閱 Repo README

存放區的使用格式如下:

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

初始

repo init -u url [options]

在目前的目錄中安裝存放區。這個指令會建立 .repo/ 目錄,其中包含存放區原始碼的 Git 存放區,以及標準 Android 資訊清單檔案。

做法:

  • -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 會將本機分支版本與上次存放區同步期間更新的遠端分支版本進行比較。存放區會提示您選取一或多個尚未上傳至審查的分支版本。

所選分支版本的所有修訂版本都會透過 HTTPS 連線傳輸至 Gerrit。您需要設定 HTTPS 密碼,才能啟用上傳授權。如要產生新的使用者名稱/密碼組合,以便透過 HTTPS 使用,請造訪密碼產生器

當 Gerrit 透過伺服器接收物件資料時,會將每個修訂版本轉換成變更,方便審查人員針對特定修訂版本加註。 如要將多個查核點修訂版本合併為單一修訂版本,請在執行上傳作業之前使用 git rebase -i

如果您執行 repo upload 時沒有引數,系統會搜尋所有專案來上傳變更。

如要在上傳後編輯變更,請使用 git rebase -igit 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)。

差異比較

repo diff [project-list]

使用 git diff 顯示修訂版本和工作樹狀結構的待處理變更。

下載

repo download target 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 的訊息。

Prune

repo prune [project-list]

刪減 (刪除) 已合併的主題。

開始

repo start branch-name [project-list]

從資訊清單中指定的修訂版本開始新的開發分支。

BRANCH_NAME 引數提供簡短說明,說明您嘗試對專案進行的變更。如果您不知道,請考慮使用 default 名稱。

project-list 引數會指定哪些專案屬於這個主題分支版本。

status

repo status [project-list]

在指定的各項專案中,比較工作樹狀結構與測試區 (索引) 與最近期的修訂版本 (HEAD)。顯示每個檔案的摘要行,其中這三種狀態有差異。

如果只要查看目前分支版本的狀態,請執行 repo status .。狀態資訊會按專案列出。專案中的每個檔案都會使用兩個字母的代碼。

第一欄中的大寫英文字母表示暫存區域與上次修訂狀態的差異。

Letter 意義 說明
- 沒有變化 HEAD 與索引中相同
A 已新增 不在 HEAD 元素中
上次修改日期 已在 HEAD 中修改
D 已刪除 在 HEAD 中 (不在索引內)
(右) 已重新命名 不在 HEAD 中,但索引中路徑已變更
C 已複製 不在 HEAD 內,正在從索引中的另一個項目複製
模式已變更 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,啟動新的分支版本,然後合併。