Git 子模块 vs 依赖管理?
Git submodules vs dependency management?
在我工作的地方,我们使用名为 apache Ivy 的工具进行依赖管理。但是,我最近一直在开发自己的一个项目,其中包含多个存储库,因此,我使用 git 超级项目来维护所有这些项目。 git 子模块对我来说很棒,到目前为止我更喜欢它们而不是 Ivy。以下是我喜欢 Ivy 的主要优点:
- 任何时候你对两个或多个相互依赖的存储库进行更改,你可以只提交到超级项目,这样很明显什么依赖于什么。在 Ivy 中,你必须做一个全新的版本,这很烦人。
- 在超级项目中更容易更好地跟踪您的更改。据我所知,Ivy 不会很好地跟踪您对版本的更改。
- Git 比 Ivy
获得更多支持
- 你只需要了解一个工具,GIT!!!
但是我公司拒绝接触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 子模块,当你的依赖树确实是并且编译依赖代码很便宜时。
在我工作的地方,我们使用名为 apache Ivy 的工具进行依赖管理。但是,我最近一直在开发自己的一个项目,其中包含多个存储库,因此,我使用 git 超级项目来维护所有这些项目。 git 子模块对我来说很棒,到目前为止我更喜欢它们而不是 Ivy。以下是我喜欢 Ivy 的主要优点:
- 任何时候你对两个或多个相互依赖的存储库进行更改,你可以只提交到超级项目,这样很明显什么依赖于什么。在 Ivy 中,你必须做一个全新的版本,这很烦人。
- 在超级项目中更容易更好地跟踪您的更改。据我所知,Ivy 不会很好地跟踪您对版本的更改。
- Git 比 Ivy 获得更多支持
- 你只需要了解一个工具,GIT!!!
但是我公司拒绝接触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 子模块,当你的依赖树确实是并且编译依赖代码很便宜时。