你现在会用 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 + 步骤脚本”,你直接复制粘贴就能玩?