【repo】使用repo进行多仓开发的基本流程

在日常开发中,使用 Repo 管理多仓库项目时,整体流程可以总结为 6 个标准步骤:

复制代码
[1. 初始化环境] ➔ [2. 创建开发分支] ➔ [3. 编写代码/提交] ➔ [4. 同步最新变更] ➔ [5. 冲突处理/审查] ➔ [6. 清理分支]

下面是完整的标准开发流程及命令:


第一步:初始化与拉取项目代码

在开始开发前,需要先下载 Manifest 清单文件并全量拉取所有子仓库。

bash 复制代码
# 1. 创建项目工作目录
mkdir my-project && cd my-project

# 2. 初始化 Repo 工作区(关联清单仓及指定分支)
repo init -u <manifest_repo_url> -b <branch_name>

# 3. 多线程并行同步所有子仓库代码
repo sync -j8

第二步:创建本地开发分支(核心步骤)

刚拉取下来的代码各个子仓库处于"游离头指针(Detached HEAD)"状态。在进行任何代码修改前,必须先创建本地分支!

bash 复制代码
# 语法:repo start <本地分支名> [--all | <指定仓库相对路径>]

# 方式 A:为所有子仓库统一切出一个名为 feature/login 的分支
repo start feature/login --all

# 方式 B:仅给与本次需求相关的子仓库切出分支(推荐,避免无关仓库产生冗余分支)
repo start feature/login services/auth apps/web

第三步:在子仓库中编写代码与提交

Repo 只负责多仓的调度,单个仓库内部的代码提交依然使用原生 Git 命令。

  1. 进入对应的子仓库目录编写代码。
  2. 运行 repo status 或 repo diff 确认全局改动情况。
bash 复制代码
# 进入特定的子仓库
cd services/auth

# 标准 Git 提交流程
git add .
git commit -m "feat(auth): add OAuth2 login support"

第四步:同步上游主干最新代码

开发过程中或提交前,需要拉取团队上游(如 main 分支)的最新代码,避免代码落后过多。

bash 复制代码
# 返回项目根目录
cd /path/to/my-project

# 同步上游最新代码(Repo 会自动在各个子仓库执行 rebase 或 merge)
repo sync -j8

第五步:推送到远程与代码评审(Code Review)

完成本地开发与测试后,将代码推送至远程进行 Code Review 或合并。

情况 A:使用 Gerrit 评审系统(Repo 原生支持)

如果团队使用 Gerrit 做代码审查,可以直接通过 Repo 批量上传:

bash 复制代码
# 批量将改动上传至 Gerrit 评审平台
repo upload
情况 B:使用 GitHub / GitLab / Gitee 等平台

如果使用 Merge Request (MR) / Pull Request (PR) 模式,进入改动过的子仓库,手动推送到个人 Fork 仓或远程分支,然后在 Web 端提交 MR/PR:

bash 复制代码
cd services/auth
git push origin feature/login

第六步:清理与收尾工作

当你的 MR/PR 被审核通过并合并入主干后,清理本地已经完成使命的分支,保持工作区整洁。

bash 复制代码
# 1. 再次同步最新的主干代码
repo sync -j8

# 2. 安全删除已合并的本地分支
repo prune

💡 极简开发流程速记

bash 复制代码
repo start <feature_name> <path>   # 1. 领任务:切分支
cd <path> && git commit -am "..."  # 2. 干活:标准 Git 提交
repo sync                          # 3. 对齐:拉取最新代码
repo upload (或 git push)           # 4. 交付:提交评审
repo prune                         # 5. 打扫:清理旧分支

特殊命令

bash 复制代码
# 格式:repo forall -c '<shell命令>'

# 示例 1:查看所有子仓库当前的 git 状态
repo forall -c 'git status -s'

# 示例 2:清空所有子仓库中的未跟踪文件(慎用)
repo forall -c 'git clean -fd'

# 示例 3:只在改动过的仓库中切回 main 分支
repo forall -c 'git checkout main'

manifest示例

bash 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <!-- 1. 定义远程 Git 服务器基地址 -->
  <remote name="origin"
          fetch="https://github.com/my-company/"
          review="https://gerrit.my-company.com" /> <!-- Gerrit 代码评审地址(可选) -->

  <!-- 2. 设置默认参数:默认使用 origin 远程仓,默认跟踪 main 分支 -->
  <default revision="main"
           remote="origin"
           sync-j="4" />

  <!-- 3. 定义各个子仓库的映射关系 -->
  <!-- path: 本地存放目录 | name: 远程仓库名 | revision: 可单独指定此仓分支/Tag/Commit -->
  <project path="apps/web" name="frontend-web" />
  <project path="services/auth" name="service-auth" revision="v1.2.0" />
  <project path="libs/common" name="core-common-lib" />
</manifest>
相关推荐
92year5 分钟前
我用运筹学穷举了麦当劳全菜单:30 块预算,怎么吃到全局最优?
python·agent·mcp
用户7624117567056 分钟前
第三章 流程控制语句
python
yunwei379 分钟前
eBPF 入门实践教程十七:编写 eBPF 程序统计随机/顺序磁盘 I/O
linux·后端·性能优化
东莞市云毅网络有限公司18 分钟前
结构化标注缺失怎么查:JSON-LD抽取与每日巡检脚本实现
python·sqlite·自动化运维·geo·数据监测
帷幕落秋22 分钟前
内存、虚拟内存与 OOM
linux·运维
dingdingfish25 分钟前
TLPI 第41章 读书笔记:Fundamentals of Shared Libraries
linux·static·link·dynamic·library·tlpi
mengge.cloud32 分钟前
Redis
运维·服务器·数据库·redis·缓存·云计算
2601_9629666432 分钟前
数学与应用数学专业准备风险管理岗,2027届秋招金融知识和工具技能怎么补?
python·sql
码流子39 分钟前
02-易迁信创兼容引擎
大数据·数据库·python
Smoothcloud润云41 分钟前
GPU服务器租用实例DNS与HTTPS下载排障实战
大数据·运维·服务器·人工智能·https·gpu算力