my-git

Submodule vs Subtree

共享代码常见方案有 submodule 和 subtree。

两者都能把外部仓库内容纳入当前项目,但使用体验和维护成本差异很大。

Submodule

Submodule 让当前仓库记录另一个仓库的特定 commit。

适合:

常用命令:

git submodule add <url> path/to/module
git submodule update --init --recursive

缺点:

Subtree

Subtree 把外部仓库内容合入当前仓库的子目录。

适合:

常见特点:

怎么选

场景 建议
第三方库独立维护 submodule
团队内部共享代码但使用者要简单 subtree
频繁共同演进的核心代码 考虑 monorepo 或包管理
只是复用少量代码 重新评估是否该抽库

工程建议

不要为了“复用”过早引入 submodule。

很多团队的 submodule 问题,本质上是代码边界没有设计清楚。

如果共享代码需要频繁和主仓库一起改,monorepo、包管理或直接合并模块,可能比 submodule 更稳。

延伸阅读