首页/开发/Git 与协作速查/子模块与子树的选择
进阶与大仓实践69 条

子模块与子树的选择

子模块保留对方完整仓库与独立历史,适合工具库与可复用组件;子树把代码并入本仓库目录,单仓克隆即可构建,代价是历史合并噪声与更新需要显式命令。

Git 与协作速查开发更新于 2026-10-12

对比

维度子模块子树 subtree
克隆体验需 --recurse-submodules普通克隆即可
历史独立仓库历史合入本仓库历史
更新方式更新指针 / --remotesubtree pull/push
贡献回上游直接向子模块仓库提 PR用 subtree split 生成提交
适合共享库、插件少量嵌入式代码、单仓构建

快速判断

快速判断
组件独立发版、被多仓复用 → 子模块
只想单仓构建、改动频率低 → 子树
需要严格版本对齐与审计 → 子模块 + 固定指针
两种方案都要求团队约定更新节奏;混用时更新责任不清,通常只选一种。

易错点

  • 子树更新会把对方历史带入本仓库,长期反复 pull 容易产生大量合并提交
  • 子模块在 CI 与本地都多一步初始化,团队新人容易漏,需要在文档中写明

数据来源与参考

  • Git 官方文档:git-submodule
  • Git 官方文档:git-subtree
  • Pro Git 2nd Edition · 7.11 子模块
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌