你現在會用 git 了,接下來學 repo(Google 推出來的多倉庫管理工具),其實就是在 Git 的基礎上做了一層封裝,方便同時管理很多 Git 倉庫。像 Android 源碼、Rockchip 全套 SDK 都是靠 repo 來拉取和管理的。
我給你分幾個層次講:
🔹 一、repo 是什么
-
本質:一個 Python 腳本,封裝了很多 Git 命令。
-
用途:管理多倉庫項目,比如 Android 系統源碼包含幾百個 git 倉庫,一個個 clone 太麻煩,所以用 repo。
-
工作方式:
- 項目里有個 manifest.xml 文件,定義了有哪些倉庫、各自路徑、用什么分支。
- repo 讀取 manifest.xml,幫你批量 clone/pull/checkout 這些倉庫。
🔹 二、repo 的基本安裝
# 下載 repo 工具
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH # 寫到 ~/.bashrc 里
🔹 三、repo 的常用命令(和 git 對照著看)
1. 初始化(類似 git clone)
repo init -u <manifest的git地址> -b <分支>
例子:
repo init -u https://github.com/AOSP/platform_manifest.git -b master
這里 -u
是 manifest 倉庫的地址,-b
是分支。
2. 下載源碼(類似 git pull)
repo sync
會根據 manifest.xml 把所有倉庫拉下來。
3. 查看倉庫狀態(類似 git status)
repo status
可以看到所有子倉庫有沒有修改。
4. 提交代碼
repo 本身不直接管提交,你還是用 git 提交:
git add .
git commit -m "fix xxx"
5. 提交到服務器(批量上傳)
repo upload .
(適合 Android Gerrit 流程;普通 git 服務器還是用 git push
)
6. 其他常見命令
-
查看當前倉庫列表:
repo list
-
同步單個倉庫:
repo sync path/to/project
-
切換所有倉庫到某個分支:
repo forall -c 'git checkout dev'
🔹 四、學習建議(新手路線)
-
先理解 manifest.xml
打開manifest.xml
看看,里面有<project name="..." path="..." revision="..."/>
,意思就是:- name:遠程倉庫名
- path:本地目錄名
- revision:分支
-
動手練習
- 找個開源的 Android manifest 倉庫,
repo init
+repo sync
把代碼拉下來。 - 改一個子倉庫的代碼,用
git commit
提交。 - 再用
repo status
看修改效果。
- 找個開源的 Android manifest 倉庫,
-
逐漸過渡到多倉管理
你可以自己寫個簡單的 manifest.xml,里面定義 2-3 個 git 倉庫,用 repo 來管理。這樣對比就能看懂 repo 的價值。
👉 總結:
- git 是單倉庫管理,你已經會了。
- repo 是多倉庫管理,重點是學會
repo init
、repo sync
、repo forall
、repo status
。 - 真正提交代碼還是用 git,repo 主要幫你批量拉取和切換分支。
要不要我幫你寫一個 最小化的 manifest.xml 示例,你可以直接練習 repo init/sync
?
👌 好的,那我就當你是第一次接觸 repo,從零開始寫一個“教科書級別”的教程,帶你從概念、安裝、原理、到實踐,一步一步來,盡量用大白話解釋。
📖 repo 入門超詳細教程(適合初學者)
1. 為什么要學 repo?
你現在已經會 git 了,它可以:
git clone
拉一個倉庫git pull
更新倉庫git push
提交代碼
👉 問題來了:如果一個大項目有 幾百個 git 倉庫 怎么辦?
比如 Android 系統:
- kernel 在一個倉庫
- bootloader 在一個倉庫
- HAL 在另一個倉庫
- 應用、驅動、文檔也都在不同倉庫
如果你自己 git clone
幾百次,麻煩到爆炸!
所以 Google 設計了 repo:
- 你只要下載 一個 manifest 文件(倉庫列表)
- repo 會幫你把所有倉庫拉下來、更新、切換分支
可以理解為:
repo = 管理很多 git 倉庫的“管家”
而 git = 管理單個倉庫的工具
2. 安裝 repo
-
在 Linux(Ubuntu/Debian 為例)里新建一個目錄保存 repo 工具:
mkdir -p ~/bin
-
下載 repo 腳本:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
-
加執行權限:
chmod a+x ~/bin/repo
-
加到環境變量(寫到
~/.bashrc
):export PATH=~/bin:$PATH source ~/.bashrc
檢查是否安裝成功:
repo --version
如果能輸出版本號,說明 OK ?
3. repo 的核心原理(大白話版)
repo 其實就是依賴一個 manifest.xml 文件,這個文件里面寫著:
<manifest><remote name="origin" fetch="https://github.com/" /><default revision="main" remote="origin" sync-j="4" /><project name="torvalds/linux" path="kernel" revision="master" /><project name="git/git" path="tools/git" revision="master" />
</manifest>
解釋:
-
<remote>
定義遠程倉庫的地址前綴 -
<default>
定義默認的分支、遠程、同步方式 -
<project>
定義一個子倉庫:- name:遠程倉庫名
- path:下載到本地的路徑
- revision:要拉的分支
👉 這樣,repo 就能批量 clone/pull 這些倉庫。
4. repo 的常用命令(一步步學)
① 初始化項目(類似 git clone
)
repo init -u <manifest 倉庫地址> -b <分支>
例子:
repo init -u https://android.googlesource.com/platform/manifest -b master
這一步會下載 manifest.xml
,相當于告訴 repo:“我的項目有哪些倉庫”。
② 拉取所有倉庫(類似 git pull
)
repo sync
它會根據 manifest.xml
,把所有項目都下載下來。
小技巧:
repo sync -c
只拉取當前分支repo sync -j4
并行下載,速度快
③ 查看所有倉庫狀態(類似 git status
)
repo status
會列出所有子倉庫的修改情況。
④ 在所有倉庫里執行命令
repo forall -c 'git branch'
意思是:在每個子倉庫里都執行 git branch
,看看都在哪個分支。
⑤ 提交代碼
注意:repo 不改變 git 的使用方式,還是用 git 提交:
git add .
git commit -m "fix bug"
git push origin dev
如果你是 Android Gerrit 開發環境,可以用:
repo upload .
(這個命令會幫你 push 到 Gerrit 審核服務器)
5. 實戰:寫一個自己的 repo 項目
我們自己寫一個最小化的 manifest 來體驗一下:
-
新建一個目錄:
mkdir ~/myrepo && cd ~/myrepo
-
創建 manifest 倉庫(比如放到 GitHub 上),在里面寫
default.xml
:<manifest><remote name="origin" fetch="https://github.com/" /><default revision="master" remote="origin" sync-j="4" /><project name="torvalds/linux" path="kernel" revision="master" /><project name="git/git" path="tools/git" revision="master" /> </manifest>
-
初始化并下載:
repo init -u https://github.com/你的用戶名/manifest.git -b master repo sync
-
看效果:
tree .
你會發現
kernel
和tools/git
兩個倉庫都被拉下來了。
6. 學習路線圖(適合你這樣的初學者)
- 第一步:在一個小項目里用 repo,熟悉命令(
init
、sync
、status
、forall
)。 - 第二步:打開 manifest.xml,理解里面倉庫的組織方式。
- 第三步:在大項目(比如 Android 或者 Rockchip SDK)里使用 repo,體會它管理幾百個倉庫的威力。
7. 總結(背口訣)
-
git 管理一個倉庫,repo 管理很多倉庫
-
常用命令:
repo init
→ 初始化repo sync
→ 拉源碼repo status
→ 看修改repo forall
→ 批量執行命令
repo 本質還是 git,所以你 git 學得越熟,repo 就越容易。
要不要我幫你寫一個 “小白練手用的 manifest.xml + 步驟腳本”,你直接復制粘貼就能玩?