repo工具

1,248 阅读2分钟

1. repo 是什么?

1.1 核心作用

  • repo 是 Google 开发的代码管理工具,专为 AOSP(Android Open Source Project)设计,用于管理数百个 Git 仓库。
  • AOSP 由上千个独立的 Git 项目组成(如 frameworks/basepackages/apps/Settings),repo 通过一个清单文件(manifest.xml)统一协调这些仓库的版本和依赖关系。

1.2 与 git 的关系

工具管理范围适用场景
git单个代码仓库普通项目开发
repo多个 Git 仓库的集合超大型项目(如 AOSP、Linux Kernel)

2. repo 基本用法

2.1 安装 repo

# Linux/macOS
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin  # 临时生效,可加入 ~/.bashrc 永久生效

2.2 初始化仓库

mkdir aosp && cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r29
  • -u:指定清单文件(manifest.xml)的 URL。
  • -b:选择分支(如 android-14.0.0_r29)。

国内用户替换为清华镜像

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r29

2.3 同步代码

repo sync -j8  # 并行下载(-j8 表示 8 个线程)

3. 如何仅下载部分代码?

3.1 方法 1:repo sync 指定路径

仅同步特定目录(如 Settings 和 Framework):

repo sync -c -j8 packages/apps/Settings frameworks/base
  • -c:仅同步当前分支(节省时间)。
  • packages/apps/Settings 和 frameworks/base 是目标路径。

3.2 方法 2:修改 manifest.xml 自定义清单

  1. 复制默认清单:

    repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r29
    cp .repo/manifests/default.xml .repo/local_manifest.xml
    
  2. 编辑 .repo/local_manifest.xml,删除不需要的 <project> 节点,仅保留目标模块(如 Settings):

    <manifest>
      <project path="packages/apps/Settings" name="platform/packages/apps/Settings" />
    </manifest>
    
  3. 重新同步:

    repo sync -j8
    

3.3 方法 3:--depth=1 浅克隆(节省空间)

repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r29 --depth=1
repo sync -c -j8 packages/apps/Settings
  • --depth=1:仅克隆最新提交,不包含历史记录。

4. 常用 repo 命令

命令作用
repo init -u <URL> -b <分支>初始化仓库
repo sync -j8同步所有代码
repo sync <路径>仅同步指定目录
repo status查看仓库状态
repo branch列出所有分支
repo start <分支名> --all创建新分支
repo diff查看代码改动

5. 仅下载部分代码的适用场景

5.1 仅研究 Settings 应用

repo sync -c -j8 packages/apps/Settings

5.2 仅研究 Framework 核心

repo sync -c -j8 frameworks/base

5.3 仅研究 Binder 机制

repo sync -c -j8 frameworks/native/libs/binder

6. 注意事项

  1. 依赖关系

    • 部分模块(如 Settings)依赖 Framework,若仅下载单个模块,可能无法直接编译。需通过 make 或 mm 在完整 AOSP 环境中编译。
  2. 网络问题

    • 国内用户建议使用清华/中科大镜像加速。
  3. 磁盘空间

    • 完整 AOSP 约 150GB+,但仅下载 Settings 只需约 100MB。

7. 总结

  • repo 是管理 AOSP 多仓库的核心工具,支持灵活下载部分代码。

  • 仅下载指定模块

    • 使用 repo sync <路径> 直接同步。
    • 或修改 local_manifest.xml 自定义清单。
  • 适合场景

    • 快速研究特定模块(如 SettingsFramework)。
    • 节省磁盘空间和时间。