【问题标题】:Git submodules vs dependency management?Git子模块与依赖管理?
【发布时间】:2018-08-14 23:51:59
【问题描述】:

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

  • 每当您对两个或多个相互依赖的存储库进行更改时,您只需提交到超级项目,这样就可以清楚地看出什么依赖于什么。在 Ivy 中,您必须发布一个全新的版本,这很烦人。
  • 在超级项目中更好地跟踪更改要容易得多。据我所知,Ivy 不会很好地跟踪您对版本的更改。
  • Git 的支持比 Ivy 多得多
  • 你只需要了解一种工具,GIT!!!

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

【问题讨论】:

  • Git 的子模块传统上很糟糕,部分原因是在 Git 1.5 和更早的时代,对 in-Git 的支持真的很差。它已经改进了很多,但从那时起我就没有尝试过使用它。看看其他人是否有很好的经验会很有趣。
  • 我最近用过它,但仍然讨厌它。特别是如果超级项目中有多个开发人员和分支。如果您是一个人或与小团体一起,这很好。在任何其他情况下都会变得一团糟......
  • 您使用哪种语言?编译/解释?
  • 我在家里的项目:java、arduino (c++, c)。工作:主要是python。
  • 我发现这篇 git-project-dependencies 的帖子可能对您的问题有很好的指导作用。

标签: git dependencies git-submodules dependency-management ivy


【解决方案1】:

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

来自Apache Ivy features页面:

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

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

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

  • 依赖关系报告

总而言之,我只会在你的依赖树真的是并且编译依赖代码很便宜时才建议使用 git 子模块。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多