共享代码常见方案有 submodule 和 subtree。
两者都能把外部仓库内容纳入当前项目,但使用体验和维护成本差异很大。
Submodule 让当前仓库记录另一个仓库的特定 commit。
适合:
常用命令:
git submodule add <url> path/to/module
git submodule update --init --recursive
缺点:
Subtree 把外部仓库内容合入当前仓库的子目录。
适合:
常见特点:
| 场景 | 建议 |
|---|---|
| 第三方库独立维护 | submodule |
| 团队内部共享代码但使用者要简单 | subtree |
| 频繁共同演进的核心代码 | 考虑 monorepo 或包管理 |
| 只是复用少量代码 | 重新评估是否该抽库 |
不要为了“复用”过早引入 submodule。
很多团队的 submodule 问题,本质上是代码边界没有设计清楚。
如果共享代码需要频繁和主仓库一起改,monorepo、包管理或直接合并模块,可能比 submodule 更稳。