回購命令參考

Repo 透過簡化跨多個儲存庫的工作來補充 Git。有關 Repo 和 Git 之間關係的說明,請參閱原​​始碼控制工具。有關 Repo 的更多詳細信息,請參閱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。此命令建立一個.repo/目錄,其中包含 Repo 原始程式碼和標準 Android 清單檔案的 Git 儲存庫。

選項:

  • -u :指定從中檢索清單儲存庫的 URL。通用清單位於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 -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檢查遠端分支。

對全部

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

修剪

repo prune [project-list]

修剪(刪除)已合併的主題。

開始

repo start branch-name [project-list]

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

BRANCH_NAME參數提供了您嘗試對項目進行的變更的簡短描述。如果您不知道,請考慮使用名稱default

project-list參數指定哪些項目參與此主題分支。

地位

repo status [project-list]

將工作樹與暫存區域(索引)以及指定的每個項目中此分支(HEAD)上的最新提交進行比較。顯示每個文件的摘要行,其中三種狀態之間存在差異。

若要僅查看目前分支的狀態,請執行repo status . 。狀態資訊按項目列出。對於專案中的每個文件,都使用兩個字母的代碼。

在第一列中,大寫字母表示暫存區域與上次提交狀態的差異。

意義描述
-不用找了HEAD 和索引相同
A添加不在 HEAD 中,在索引中
中號修改的在HEAD中,在索引中修改
D已刪除在 HEAD 中,不在索引中
更名不在 HEAD 中,路徑在索引中更改
C已複製不在 HEAD 中,從索引中的另一個複製
時間模式改變HEAD 和索引中的內容相同,模式已更改
U未合併HEAD和索引衝突;所需分辨率

在第二列中,小寫字母表示工作目錄與索引的差異。

意義描述
-新的/未知的不在索引中,在工作樹中
修改的在索引中,在工作樹中,修改
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,啟動一個新分支,然後合併它。