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 後,您可以通過運行以下命令找到以所有命令摘要開頭的最新文檔:
repo help
您可以通過在 Repo 樹中運行此命令來查看有關任何命令的詳細信息:
repo help command
例如,以下命令為 Repo 的init
參數生成描述和選項列表,該參數在當前目錄中初始化 Repo。 (有關詳細信息,請參閱初始化。)
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 命令,當前工作目錄必須是.repo/
的父目錄或父目錄的子目錄。
同步
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
是本地項目目錄中當前簽出的分支。如果本地分支沒有跟踪遠程存儲庫中的分支,則項目不會發生同步。如果 Git rebase 操作導致合併衝突,請使用普通的 Git 命令(例如,
git rebase --continue
)來解決衝突。
成功運行repo sync
後,指定項目中的代碼是最新的,並與遠程存儲庫中的代碼同步。
以下是關鍵選項。有關更多信息,請參閱repo help sync
:
-c
:僅從服務器獲取當前清單分支。-d
:將指定的項目切換回清單修訂版。如果項目當前位於主題分支上,這將很有幫助,但暫時需要清單修訂。-f
:即使項目無法同步,也繼續同步其他項目。-j threadcount
:在線程之間拆分同步以更快地完成。確保您不會壓倒您的機器 - 為其他任務保留一些 CPU。要查看可用 CPU 的數量,首先運行:nproc --all
-q
:通過抑制狀態消息安靜地運行。-s
:同步到當前清單中manifest-server元素指定的已知良好構建。
上傳
repo upload [project-list]
對於指定的項目,Repo 將本地分支與上次 Repo 同步期間更新的遠程分支進行比較。 Repo 提示您選擇一個或多個尚未上傳的分支進行審核。
然後,選定分支上的所有提交都會通過 HTTPS 連接傳輸到 Gerrit。您需要配置 HTTPS 密碼才能啟用上傳授權。訪問密碼生成器以生成新的用戶名/密碼對以通過 HTTPS 使用。
當 Gerrit 通過其服務器接收到對像數據時,它會將每個提交轉換為更改,以便審閱者可以對特定提交進行評論。要將多個檢查點提交合併為一個提交,請在運行上傳之前使用git rebase -i
。
如果您運行不帶參數的repo upload
,它會搜索所有項目以查找要上傳的更改。
要在上傳後編輯更改,請使用git rebase -i
或git commit --amend
類的工具來更新您的本地提交。編輯完成後:
- 驗證更新的分支是當前簽出的分支。
- 對於系列中的每個提交,在括號內輸入 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.
上傳完成後,更改有一個額外的補丁集。
如果您只想上傳當前簽出的 Git 分支,請使用標誌--current-branch
(或--cbr
)。
差異
repo diff [project-list]
使用git diff
顯示提交和工作樹之間的突出更改。
下載
repo download target change
從審查系統下載指定的更改,並使其在項目的本地工作目錄中可用。
例如,要將更改 23823下載到您的平台/構建目錄中:
repo download platform/build 23823
運行repo sync
會刪除使用repo download
檢索到的任何提交。或者您可以使用git checkout m/master
查看遠程分支。
注意:全球所有服務器都存在復制延遲,因此在Gerrit的 Web 上可見更改與repo download
可以為所有用戶找到更改之間存在輕微的鏡像延遲。
對所有人
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
:顯示命令寫入標準錯誤的消息。
修剪
repo prune [project-list]
修剪(刪除)已經合併的主題。
開始
repo start branch-name [project-list]
從清單中指定的修訂開始,開始一個新的開發分支。
BRANCH_NAME
參數提供了您嘗試對項目進行的更改的簡短描述。如果您不知道,請考慮使用名稱default
。
project-list
參數指定哪些項目參與此主題分支。
注意:句點 (.) 是當前工作目錄中項目的簡寫。
地位
repo status [project-list]
將工作樹與暫存區(索引)和每個指定項目中此分支上的最新提交(HEAD)進行比較。顯示這三種狀態之間存在差異的每個文件的摘要行。
要查看當前分支的狀態,請運行repo status .
.狀態信息按項目列出。對於項目中的每個文件,使用兩個字母的代碼。
在第一列中,一個大寫字母表示暫存區與上次提交狀態的不同之處。
信 | 意義 | 描述 |
---|---|---|
- | 沒變 | HEAD 和 index 相同 |
一個 | 添加 | 不在 HEAD 中,在索引中 |
米 | 修改的 | 在 HEAD 中,在索引中修改 |
D | 已刪除 | 在 HEAD 中,不在索引中 |
R | 重命名 | 不在 HEAD 中,路徑在索引中更改 |
C | 已復制 | 不在 HEAD 中,從索引中的另一個複制 |
噸 | 模式已更改 | HEAD 和 index 中的內容相同,模式已更改 |
ü | 未合併 | 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,啟動一個新分支,然後合併它。