Git Submodules 为何总让人头疼?

Git Submodules as a Package Manager

Git Submodules 为何总让人头疼?

上周我在使用 Git Worktree 时,发现它和 Git Submodules 的冲突导致无法移除工作树。这让我重新审视 Submodules 作为包管理器的可行性。虽然它拥有精确的 Commit SHA 锁定和类似 Manifest 的 .gitmodules 文件,但在依赖解析、存储隔离和更新机制上远不如现代包管理器完善。从 Rust 项目弃用 Submodules 的经历,到多次远程代码执行漏洞的爆发,Submodules 暴露了 Git 底层细节的复杂性。尽管社区正在尝试通过硬链接共享存储来优化,但缺乏统一的版本范围约束和安全的解析机制,使其体验在每一步都显得笨拙且充满风险。

Submodules 直接暴露了 Git 的内部细节:以对象 ID 作为锁定、更新后处于分离 HEAD 状态、特殊的目录布局以及 Manifest 中的传输 URL,而包管理器则是将这些机制封装在格式、解析器和本地缓存之后。

同日更多故事

2026-09-05