repo 学习教程

发布于:2025-09-07 ⋅ 阅读:(23) ⋅ 点赞:(0)

你现在会用 git 了,接下来学 repo(Google 推出来的多仓库管理工具),其实就是在 Git 的基础上做了一层封装,方便同时管理很多 Git 仓库。像 Android 源码、Rockchip 全套 SDK 都是靠 repo 来拉取和管理的。

我给你分几个层次讲:


🔹 一、repo 是什么

  • 本质:一个 Python 脚本,封装了很多 Git 命令。

  • 用途:管理多仓库项目,比如 Android 系统源码包含几百个 git 仓库,一个个 clone 太麻烦,所以用 repo。

  • 工作方式

    1. 项目里有个 manifest.xml 文件,定义了有哪些仓库、各自路径、用什么分支。
    2. 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'
    

🔹 四、学习建议(新手路线)

  1. 先理解 manifest.xml
    打开 manifest.xml 看看,里面有 <project name="..." path="..." revision="..."/>,意思就是:

    • name:远程仓库名
    • path:本地目录名
    • revision:分支
  2. 动手练习

    • 找个开源的 Android manifest 仓库,repo init + repo sync 把代码拉下来。
    • 改一个子仓库的代码,用 git commit 提交。
    • 再用 repo status 看修改效果。
  3. 逐渐过渡到多仓管理
    你可以自己写个简单的 manifest.xml,里面定义 2-3 个 git 仓库,用 repo 来管理。这样对比就能看懂 repo 的价值。


👉 总结:

  • git 是单仓库管理,你已经会了。
  • repo 是多仓库管理,重点是学会 repo initrepo syncrepo forallrepo 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

  1. 在 Linux(Ubuntu/Debian 为例)里新建一个目录保存 repo 工具:

    mkdir -p ~/bin
    
  2. 下载 repo 脚本:

    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    
  3. 加执行权限:

    chmod a+x ~/bin/repo
    
  4. 加到环境变量(写到 ~/.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 来体验一下:

  1. 新建一个目录:

    mkdir ~/myrepo && cd ~/myrepo
    
  2. 创建 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>
    
  3. 初始化并下载:

    repo init -u https://github.com/你的用户名/manifest.git -b master
    repo sync
    
  4. 看效果:

    tree .
    

    你会发现 kerneltools/git 两个仓库都被拉下来了。


6. 学习路线图(适合你这样的初学者)

  1. 第一步:在一个小项目里用 repo,熟悉命令(initsyncstatusforall)。
  2. 第二步:打开 manifest.xml,理解里面仓库的组织方式。
  3. 第三步:在大项目(比如 Android 或者 Rockchip SDK)里使用 repo,体会它管理几百个仓库的威力。

7. 总结(背口诀)

  • git 管理一个仓库repo 管理很多仓库

  • 常用命令:

    • repo init → 初始化
    • repo sync → 拉源码
    • repo status → 看修改
    • repo forall → 批量执行命令

repo 本质还是 git,所以你 git 学得越熟,repo 就越容易。


要不要我帮你写一个 “小白练手用的 manifest.xml + 步骤脚本”,你直接复制粘贴就能玩?


网站公告

今日签到

点亮在社区的每一天
去签到