repo使用總結—從入門到入門

1 what’s repo

Android 使用 Git 作爲代碼管理工具,開發了 Gerrit 進行代碼審覈以便更好的對代碼進行集中式管理,還開發了 repo 命令行工具,實際上python指令對git的一層封裝,對 git 部分命令封裝,將百多個 git 庫有效的進行組織,因爲源碼倉庫數量龐大,使用git進行管理會帶來很多不便,這裏repo就體現了其優越性。

2 官方文檔

該部分轉自官網參考文檔,比較有參考價值,按照這裏文檔內容,基本上大部分問題都可以解決了,筆者根據實際使用的情況,做了一部分補充。ctrl+cctrl+v來一波,”問題都解決了“

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 init -u url [options]

在當前目錄中安裝 Repo。這會創建一個 .repo/ 目錄,其中包含用於 Repo 源代碼和標準 Android 清單文件的 Git 代碼庫。該 .repo/ 目錄中還包含 manifest.xml,這是一個指向 .repo/manifests/ 目錄中所選清單的符號鏈接。有關更新清單的說明,請參閱 manifest-format.md

選項:

  • -u:指定要從中檢索清單代碼庫的網址。您可以在 https://android.googlesource.com/platform/manifest中找到通用清單
  • -m:選擇代碼庫中的一個清單文件。如果未選擇任何清單名稱,則會默認選擇 default.xml。
  • -b:指定修訂版本,即特定的清單分支。

注意:對於其餘的所有 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:即使某個項目同步失敗,也繼續同步其他項目。

upload 提交更改

repo upload [project-list]

對於指定的項目,Repo 會將本地分支與最後一次 repo sync 時更新的遠程分支進行比較。Repo 會提示您選擇一個或多個尚未上傳以供審覈的分支。

接下來,所選分支上的所有提交都會通過 HTTPS 連接傳輸到 Gerrit。您需要配置一個 HTTPS 密碼以啓用上傳授權。要生成新的用戶名/密碼對以用於 HTTPS 傳輸,請訪問密碼生成器

當 Gerrit 通過其服務器接收對象數據時,它會將每項提交轉變成一項更改,以便審覈者可以針對特定提交給出意見。要將幾項“檢查點”提交合併爲一項提交,請使用 git rebase -i,然後再運行 upload。

如果您在未使用任何參數的情況下運行 repo upload,則該操作會搜索所有項目中的更改以進行上傳。

要在更改上傳後對其進行修改,請使用 git rebase -igit 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)。

diff

repo diff [project-list]

使用 git diff 顯示提交與工作樹之間的明顯更改。

download

repo download target change

從審覈系統中下載指定更改,並放在您項目的本地工作目錄中供使用。

例如,要將更改 23823 下載到您的平臺/編譯目錄,請運行以下命令:

repo download platform/build 23823

運行 repo sync 應該可以移除通過 repo download 檢索到的任何提交。或者,您可以使用 git checkout m/master將遠程分支檢出。

注意:由於全球的所有服務器均存在複製延遲,因此某項更改出現在網絡上(位於 Gerrit 中)的時間與所有用戶可通過 repo download 找到此項更改的時間之間存在些許的鏡像延遲。

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 參數指定了將參與此主題分支的項目。

注意:句點 (.) 是一個簡寫形式,用來代表當前工作目錄中的項目。

Example:創建三個分支test-1,test-2,test-3

repo start test-1 --all
repo start test-2 --all
repo start test-3 --all

status

repo status [project-list]

對於每個指定的項目,將工作樹與臨時區域(索引)以及此分支 (HEAD) 上的最近一次提交進行比較。在這三種狀態存在差異之處顯示每個文件的摘要行。

要僅查看當前分支的狀態,請運行 repo status。系統會按項目列出狀態信息。對於項目中的每個文件,系統使用兩個字母的代碼來表示:

在第一列中,大寫字母表示臨時區域與上次提交狀態之間的不同之處。

字母 含義 說明
- 沒有變化 在 HEAD 與索引中相同
A 已添加 不存在於 HEAD 中,但存在於索引中
M 已修改 存在於 HEAD 中,但索引中的文件已修改
D 已刪除 存在於 HEAD 中,但不存在於索引中
R 已重命名 不存在於 HEAD 中,索引中文件的路徑已更改
C 已複製 不存在於 HEAD 中,複製自索引中的另一個文件
T 模式已更改 HEAD 與索引中的內容相同,但模式已更改
U 未合併 HEAD 與索引之間存在衝突;需要加以解決

在第二列中,小寫字母表示工作目錄與索引之間的不同之處。

字母 含義 說明
- 新/未知 不存在於索引中,但存在於工作樹中
m 已修改 存在於索引中,也存在於工作樹中(但已修改)
d 已刪除 存在於索引中,但不存在於工作樹中

branches

查看當前所有分支,相當於git下的指令git branch -a

repo branches

已經創建了三個分支了

   test-1                    | in all projects
   test-2                    | in all projects
*  test-3                    | in all projects

abandon

刪除本地已經存在的某個分支,相當於git branch -d <branch-name>

repo abandon [branch-name]

Example:刪除本地分支test-3

repo adbandon test-3

後續在使用中遇到問題再更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章