Skip to content

Monorepo 决策 = 集中化 vs 分散化 ​

解决什么问题:代码组织方式影响协作模式—— Monorepo = 单仓库 = 集中化优势;Multi-repo = 多仓库 = 分散化自主。

业务问题 ​

真实场景 ​

场景 1:Monorepo 成功案例

Google / Meta / Microsoft:
  - 单仓库
  - 数十万工程师
  - 跨项目原子变更
  - 统一工具链(Bazel)

场景 2:Multi-repo 成功案例

Linux kernel / Kubernetes:
  - 多仓库
  - 独立发布周期
  - 独立治理
  - 轻量级协作

Monorepo vs Multi-repo ​

维度MonorepoMulti-repo
跨项目变更原子性多个 PR
代码搜索一次查询多个仓库
依赖管理统一版本各自维护
CI/CD集中分散
仓库大小PB 级GB 级
团队自治弱强
适合大型组织独立项目

Trunk-Based Development ​

特点:
  - 单一主干(trunk)
  - 短分支(< 1 天)
  - 持续集成
  - Feature flags 替代长分支

vs Git Flow:

  • 多分支(develop / feature / release)
  • 合并冲突多
  • 集成延迟

工程实践 ​

决策树 ​

决策:
  1. 团队规模 > 100?
     - 是 → 考虑 Monorepo
     - 否 → Multi-repo
  2. 项目耦合度高?
     - 是 → Monorepo
     - 否 → Multi-repo
  3. 跨项目重构频繁?
     - 是 → Monorepo
  4. 工具链能支持?
     - 是 → Monorepo
     - 否 → Multi-repo

工具支持 ​

工具适用
BazelMonorepo(Google)
PantsMonorepo(Twitter)
NxMonorepo(Nrwl)
Turborepo中型 Monorepo
LernaJavaScript Monorepo

与 L 层对位 ​

关键洞察 ​

  1. Monorepo ≠ 永远更好——是 trade-off。
  2. 工具链决定 Monorepo 可行性——没有 Bazel 等价物别试。
  3. Feature flags 替代分支——Trunk-based 的关键。
  4. Conway 定律——代码组织反映组织结构。
  5. 与 cybernetics 同构——Ch 21 多级分散 = Multi-repo;Ch 4 §4.6 中央协调 = Monorepo。

从名家方法论与工程化思路中蒸馏出自己的工程体系。