Git 子模块 vs 依赖管理?

Git submodules vs dependency management?

在我工作的地方,我们使用名为 apache Ivy 的工具进行依赖管理。但是,我最近一直在开发自己的一个项目,其中包含多个存储库,因此,我使用 git 超级项目来维护所有这些项目。 git 子模块对我来说很棒,到目前为止我更喜欢它们而不是 Ivy。以下是我喜欢 Ivy 的主要优点:

但是我公司拒绝接触gitsubmodules/superprojects。我也一直在做一些研究,似乎很多人不喜欢 git 子模块,并且它不被认为是一个好的 "dependency management" 工具。谁能帮我理解为什么?

Apache Ivy 等依赖管理器的杀手级功能可能是传递依赖 解决和冲突管理。使用 git 子模块无法做到这一点。

来自 Apache Ivy features 页:

Imagine a component that's often reused by a software team, and that this component has dependencies of its own. Without a good dependency management tool, each time this component is reused, all its dependencies must be repeated. With Apache Ivy, it's different: simply write a dependency file once for the component, and benefit from the work already done anytime this component is reuse.

我认为重要的另一个功能是:

  • 下载已经编译好的包,不用每次都编译

  • 依赖项报告

综上所述,我只建议 git 子模块,当你的依赖树确实是并且编译依赖代码很便宜时。