Git 子模块 vs 依赖管理?

Sla*_*ion 6 git dependencies ivy dependency-management git-submodules

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

  • 任何时候对相互依赖的两个或多个存储库进行更改时,您都可以提交到超级项目,因此很明显什么依赖于什么。在 Ivy 中,您必须发布一个全新的版本,这很烦人。
  • 在超级项目中更好地跟踪更改要容易得多。据我所知,Ivy 并没有很好地跟踪您对发布的更改。
  • Git 比 Ivy 有更多的支持
  • 你只需要了解一个工具,GIT!!!

但是,我的公司拒绝接触 git 子模块/超级项目。我也一直在做一些研究,似乎很多人不喜欢 git submodules 并且它不被认为是一个很好的“依赖管理”工具。谁能帮我理解为什么?

Gon*_*heu 5

像 Apache Ivy 这样的依赖管理器的杀手级功能可能是 传递依赖解决和冲突管理。使用 git 子模块这是不可行的。

Apache Ivy 功能页面:

想象一个经常被软件团队重用的组件,并且这个组件有它自己的依赖关系。如果没有一个好的依赖管理工具,每次重用这个组件时,它的所有依赖都必须重复。使用 Apache Ivy,情况有所不同:只需为该组件编写一次依赖文件,即可在重用该组件时从已经完成的工作中受益。

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

  • 下载已经编译好的包,而不必每次都编译它们

  • 依赖报告

话虽如此,我只会在您的依赖树确实存在并且编译依赖项代码很便宜时才建议使用 git 子模块。