Repo 可以用來(lái)整合 Git 代碼庫(kù),代碼上傳到 Gerrit 修訂版本控制系統(tǒng)。Repo 只是為了在 Android 環(huán)境中更輕松地使用 Git。
repo 安裝和配置
# Debian/Ubuntu.
$ sudo apt-get install repo
$ mkdir -p ~/.bin
$ PATH="${HOME}/.bin:${PATH}"
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
$ chmod a+rx ~/.bin/repo
1、repo命令的使用方法
$ repo [command] [options]
$ repo help //幫助
$ repo help <COMMAND>
2、repo init
該命令創(chuàng)建一個(gè) .repo/ 目錄,其中包含用于 Repo 源代碼和標(biāo)準(zhǔn) Android 清單文件的 Git 代碼庫(kù)。
$ repo init -u <URL> [<OPTIONS>] //在當(dāng)前目錄中安裝 Repo
參數(shù):
-u:指定要從中檢索清單代碼庫(kù)的地址。
-m:在代碼庫(kù)中選擇清單文件。如果未選擇任何清單名稱(chēng),則會(huì)默認(rèn)選擇 default.xml。
-b:指定分支。
#注意:對(duì)于其余的所有 Repo 命令,當(dāng)前工作目錄必須是 .repo/ 的父目錄或相應(yīng)父目錄的子目錄
3、repo sync
$ repo sync [<PROJECT_LIST>] //同步代碼
選項(xiàng):
-d:將指定項(xiàng)目切換回指定分支。
-f:即使某個(gè)項(xiàng)目同步失敗,系統(tǒng)也會(huì)繼續(xù)同步其他項(xiàng)目。
repo sync 運(yùn)行成功后,指定項(xiàng)目中的代碼會(huì)與遠(yuǎn)程代碼庫(kù)中的代碼保持同步。
* 如果目標(biāo)項(xiàng)目從未同步過(guò),則 repo sync 相當(dāng)于 git clone。
* 如果目標(biāo)項(xiàng)目已同步過(guò),則 repo sync 相當(dāng)于以下命令:
git remote update
git rebase origin/<BRANCH>
如果 git rebase 操作導(dǎo)致合并沖突,那么您需要使用普通 Git 命令(例如 git rebase --continue)來(lái)解決沖突。
4、repo upload
repo upload [<PROJECT_LIST>] //上傳代碼
您選擇一個(gè)或多個(gè)分支后,所選分支上的所有提交都會(huì)通過(guò) HTTPS 連接傳輸?shù)?Gerrit.
如果您在未使用任何參數(shù)的情況下運(yùn)行 repo upload,則該操作會(huì)搜索所有項(xiàng)目中的更改以進(jìn)行上傳。
要在更改上傳之后對(duì)其進(jìn)行修改,應(yīng)使用 git rebase -i 或 git commit --amend
5、repo diff
repo diff [<PROJECT_LIST>]
顯示提交的代碼和當(dāng)前工作目錄代碼之間的差異。
6、repo download
下載特定的修改版本到本地
repo download <TARGET> <CHANGE>
例如:$ repo download platform/build 23823
repo sync 應(yīng)該可以有效移除通過(guò) repo download 檢索到的任何提交
7、repo forall
這個(gè)命令會(huì)遍歷所有的git倉(cāng)庫(kù),并在每個(gè)倉(cāng)庫(kù)執(zhí)行-c所指定的命令
repo forall [<PROJECT_LIST>] -c <COMMAND>
選項(xiàng):
-c:要運(yùn)行的命令和參數(shù)。
-p:可以在遍歷到每個(gè)倉(cāng)庫(kù)的時(shí)候先打印出當(dāng)前的pwd
-v:顯示該命令向 stderr 寫(xiě)入的消息。
在每個(gè)項(xiàng)目中運(yùn)行指定的 shell 命令。通過(guò) repo forall 可使用下列額外的環(huán)境變量:
REPO_PROJECT 可設(shè)為項(xiàng)目的具有唯一性的名稱(chēng)。
REPO_PATH 是客戶(hù)端根目錄的相對(duì)路徑。
REPO_REMOTE 是清單中遠(yuǎn)程系統(tǒng)的名稱(chēng)。
REPO_LREV 是清單中修訂版本的名稱(chēng),已轉(zhuǎn)換為本地跟蹤分支。如果您需要將清單修訂版本傳遞到某個(gè)本地運(yùn)行的 Git 命令,則可使用此變量。
REPO_RREV 是清單中修訂版本的名稱(chēng),與清單中顯示的名稱(chēng)完全一致。
8、repo prune
刪除已經(jīng)merge的分支
repo prune [<PROJECT_LIST>]
9、repo start
創(chuàng)建分支
repo start <BRANCH_NAME> [<PROJECT_LIST>]
<BRANCH_NAME> 參數(shù)應(yīng)簡(jiǎn)要說(shuō)明您嘗試對(duì)項(xiàng)目進(jìn)行的更改。如果您不知道,則不妨考慮使用默認(rèn)名稱(chēng)。
<PROJECT_LIST> 指定了將參與此分支的項(xiàng)目。
#注意:“.”是一個(gè)非常實(shí)用的簡(jiǎn)寫(xiě)形式,用來(lái)代表當(dāng)前工作目錄中的項(xiàng)目。
10、repo status
repo status [<PROJECT_LIST>]
顯示 project 中每個(gè)倉(cāng)庫(kù)的狀態(tài),并打印倉(cāng)庫(kù)名稱(chēng)
要僅查看當(dāng)前分支的狀態(tài),請(qǐng)運(yùn)行 repo status。系統(tǒng)會(huì)按項(xiàng)目列出狀態(tài)信息。
在第一列中,大寫(xiě)字母表示暫存區(qū)與上次提交狀態(tài)之間的不同之處。
字母 含義 說(shuō)明
- 無(wú)更改 HEAD 與索引中相同
A 已添加 不存在于 HEAD 中,但存在于索引中
M 已修改 存在于 HEAD 中,但索引中的文件已修改
D 已刪除 存在于 HEAD 中,但不存在于索引中
R 已重命名 不存在于 HEAD 中,但索引中的文件的路徑已更改
C 已復(fù)制 不存在于 HEAD 中,已從索引中的另一個(gè)文件復(fù)制
T 模式已更改 HEAD 與索引中的內(nèi)容相同,但模式已更改
U 未合并 HEAD 與索引之間存在沖突;需要解決方案
在第二列中,小寫(xiě)字母表示工作區(qū)與索引之間的不同之處。
字母 含義 說(shuō)明
- 新/未知 不存在于索引中,但存在于工作區(qū)中
m 已修改 存在于索引中,也存在于工作區(qū)中(但已修改)
d 已刪除 存在于索引中,不存在于工作區(qū)中
11、repo foreach [ project-lists] -c command
對(duì)每一個(gè) project 運(yùn)行 command 命令
===============================================================
資料:
- Homepage:
https://gerrit.googlesource.com/git-repo/ - Mailing list:
repo-discuss on Google Groups - Bug reports:
https://bugs.chromium.org/p/gerrit/issues/list?q=component:repo - Source:
https://gerrit.googlesource.com/git-repo/ - Overview:
https://source.android.com/source/developing.html - Docs:
https://source.android.com/source/using-repo.html - repo Manifest Format:
https://gerrit.googlesource.com/git-repo/+/refs/heads/master/docs/manifest-format.md - repo Hooks:
https://gerrit.googlesource.com/git-repo/+/refs/heads/master/docs/repo-hooks.md - Submitting patches:
https://gerrit.googlesource.com/git-repo/+/refs/heads/master/SUBMITTING_PATCHES.md - Running Repo in Microsoft Windows:
https://gerrit.googlesource.com/git-repo/+/refs/heads/master/docs/windows.md - GitHub mirror:
https://github.com/GerritCodeReview/git-repo - Postsubmit tests:
https://github.com/GerritCodeReview/git-repo/actions