【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 statusrepo 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>
相关推荐
Livia要学习4 小时前
Python装饰器
开发语言·python
wuminyu5 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
circuitsosk6 小时前
向量数据库选型与性能压测:Milvus、Pinecone、Chroma在真实业务下的对比
数据库·python·pinecone·milvus·向量数据库·chroma
白狐_7986 小时前
408计算机网络第3章:以太网交换机与共享式以太网——知识总结
服务器·网络·计算机网络
雾时之林6 小时前
python--字符串
开发语言·python
战略性的菠萝6 小时前
研究生基本功-Python快速入门(一)
python
月光船幽幽7 小时前
门控函数SHS阈值与调制机制解析
人工智能·python·算法
测试19987 小时前
2026全新软件测试面试八股文(含答案+文档)
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
测试运维日常笔记7 小时前
tcpdump(Linux服务器)配合 Wireshark(本地分析)使用手顺与常用过滤语法详解
linux·服务器·tcpdump
Zane19947 小时前
map 比推导式快"是真的吗?一文讲透 map、filter、reduce 与 lambda 的真实性能与设计取舍
后端·python