Workflows

monorepo 场景下的稀疏检出与多工作树协作

在 monorepo 场景里,用 sparse-checkout 和 worktree 限定工作范围,降低上下文负担并支持并行任务。

适合谁看
  • 要把命令组合成稳定流程的团队成员
  • 需要处理协作顺序和分支边界的人
前置知识
  • 知道 fetch / pull / push / branch 的基本作用
  • 能理解一条分支为什么会分叉
常见风险
  • 照抄流程却没确认当前分支关系
  • 在共享分支上用错整合方式

monorepo 最常见的问题不是 Git 失效,而是工作范围太大。

这时可以把两个能力结合起来:

  • sparse-checkout:只拉起当前需要的目录
  • worktree:为并行任务开多个独立工作副本

一个常见场景

Monorepo 稀疏检出 + Worktree在 monorepo 中,sparse-checkout 限定检出的目录范围,worktree 提供并行工作空间。两者结合大幅降低上下文负担。
完整 Monorepo
packages/frontend/packages/backend/packages/shared/docs/infra/
限定工作空间
wt-frontend/ → 只检出 frontend + sharedwt-backend/ → 只检出 backend + shared每个 worktree 只包含相关目录
cone 模式下 sparse-checkout 性能更好。配合 worktree 实现真正的并行 monorepo 开发。

你只改前端应用,但仓库里还有后端、脚本、基础设施和大量共享包。
如果每次都把整棵树都拉起来,成本会很高。

一条可执行流程

git sparse-checkout init --cone
git sparse-checkout set apps/web packages/ui
git worktree add ../repo-hotfix hotfix/login-fix

这样你可以:

  • 在当前工作树处理主任务
  • 在另一个 worktree 里处理热修
  • 同时让当前工作区范围保持更小

和 submodule 的边界

如果仓库本身就是 monorepo,优先考虑 sparse-checkout / worktree。
如果你管理的是独立仓库依赖关系,才更可能落到 submodule。

一个原则

在大型仓库里,Git 工作流优化的关键不只是命令更高级,而是把“我现在真正要改的范围”压缩到足够清楚。