1.简介

Repo 是一个用于管理多个 Git 仓库的命令行工具,由 Google 开发,且广泛应用于多个大型开源项目。由于使用 Git 管理大型的开源项目比较困难,repo 通过清单文件(manifest)定义所有子仓库的依赖关系整合起多个 git 仓库,使得开发者可以更有效地管理和同步多项目代码库。

2.Linux 安装 repo 工具

# 下载 repo 工具到 ~/bin 目录
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# 添加到 PATH(临时生效)
export PATH="$HOME/bin:$PATH"

# 添加到 ~/.bashrc 或 ~/.zshrc(永久生效)
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

2.初始化仓库

2.1创建源码目录

mkdir my-project && cd my-project

2.2初始化 repo

repo init -u <MANIFEST_REPO_URL> -b <BRANCH>

其中,-u 指定了清单仓库的 URL,-b 选择分支。

2.3同步源码

repo sync

此处可以通过 -j4 进行并行下载的配置;-c 表示只同步当前分支,可节省时间;–forces-ync 表示强制覆盖本地修改。

3.日常开发操作

3.1 查看仓库状态

repo status

3.2切换分支

repo start <BRANCH_NAME> --all  # 为所有仓库创建新分支
repo checkout <BRANCH_NAME>     # 切换到已有分支

3.3同步最新代码

repo sync

3.4提交修改

cd meat-agl #meta-agl
git add git add scripts/build-raspberrypi5
git commit -m “Add implement for raspberrypi5”
git review #推送至远程审核,依赖 git-review 工具

3.5回退修改

repo forall -c 'git reset --hard'  # 丢弃所有子仓库的修改

4.高级功能

4.1选择性同步

repo sync <PROJECT1> <PROJECT2>  # 仅同步指定子仓库

4.2查看差异

repo diff

4.3运行命令到所有仓库

repo forceall -c “git status” # 在所有仓库中运行“git status”

4.4自定义清单文件(manifest.xml

  • 修改 .repo/manifest.xml 或使用本地清单:
cat local-manifest.xml
<manifest>
  <remote name="custom" fetch="git://your-repo-url" />
  <project path="path/to/subrepo" name="subrepo" remote="custom" revision="main" />
</manifest>
repo init -m local-manifest.xml

5. AGL 示例

# 1.初始化并同步源代码
repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo -b halibut
repo sync -j4
# 2.创建开发分支
repo start fix-bug-5399 --all
# 3.修改代码并提交
cd meta-agl
vim docs/devguides-book.yml # 编辑文件
git add .
git commit -m "Update guide doc for bug5399"
git review  # 推送到 Gerrit
# 4.更新代码
repo sync
repo rebase  # 将本地修改变基到最新代码

6.常用命令总结

命令 作用
repo init -u URL -b BRANCH 初始化仓库
repo sync 同步所有子仓库
repo status 查看所有仓库状态
repo start BRANCH -all 创建新分支
repo farall -c CMD 在所有仓库中执行命令
repo upload 提交代码审核

7.与 git 的比较

功能 repo git
多仓库管理 支持 不支持
分支操作 批量创建/切换分支 各分支独立操作
同步代码 一键同步所有仓库 需手动进入每个仓库
提交审核 集成 Gerrit(git review) 需配置远程仓库和 PR

总而言之,通过 repo 工具,开发者可以更高效地管理包含数个子仓库的大型项目。开源的性质使得开发者不仅可以自由地使用 Repo 工具,还能够根据自己的需求进行定制和优化

Reference

repo源码
Repo 命令参考资料
一篇通俗易懂的repo教程

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐