在我工作的地方,我们使用一个名为apache Ivy的工具进行依赖管理。但是,我最近一直在开发一个自己的项目,其中包含多个存储库,因此,我正在使用 git 超级项目来维护所有这些存储库。git 子模块对我来说很棒,到目前为止,我非常喜欢它们而不是常春藤。以下是我喜欢他们而不是常春藤的主要事情:
- 每当您对两个或多个相互依赖的存储库进行更改时,您都可以提交到超级项目,这样就很明显什么依赖于什么。在常春藤中,你必须做一个全新的版本,这很烦人。
- 在超级项目中更好地跟踪更改要容易得多。据我所知,Ivy并没有很好地跟踪您对版本的更改。
- Git 比 Ivy 有更多的支持
- 你只需要了解一个工具,GIT!!
但是,我的公司拒绝接触 git 子模块/超级项目。我也一直在做一些研究,似乎很多人不喜欢 git 子模块,它不被认为是一个好的"依赖管理"工具。谁能帮我理解为什么?
像Apache Ivy这样的依赖管理器的杀手锏可能是传递依赖关系解决和冲突管理。使用 git 子模块这是不可行的。
从Apache Ivy功能页面:
假设一个组件经常被软件团队重用,并且该组件具有自己的依赖项。如果没有一个好的依赖关系管理工具,每次重用这个组件时,都必须重复它的所有依赖关系。使用 Apache Ivy,情况就不同了:只需为组件编写一次依赖项文件,即可从重用该组件时已完成的工作中受益。
我认为重要的其他功能是:
-
下载已编译的包,而不必每次都编译它们
-
依赖关系报告
综上所述,我只会在依赖项树较浅且编译依赖项代码便宜时建议使用 git 子模块。