【问题标题】:Dependency management in git repositories (using submodules) [closed]git存储库中的依赖管理(使用子模块)[关闭]
【发布时间】:2013-11-21 11:04:32
【问题描述】:

我有一个相当大的项目,有很多依赖项。项目存储在 git 存储库中,依赖项存储在作为子模块链接的专用 git 存储库中。依赖项可以有更多的依赖项(同样,使用 git 子模块)。

这很好用。但是,如果两个依赖项都需要第三个依赖项,我会在更新时遇到麻烦。

依赖图如下所示:

[Main Repo]
  |
  |-- [ModuleA]
  |       |
  |       \-- [ModuleC]
  |
  \-- [ModuleB]
          |
          \-- [ModuleC]

现在我更新 ModuleA 和 ModuleB 中的子模块指针。这样,两个模块都保持独立。但是,这是很多工作。

在大型项目中通常如何解决这个问题?我正在寻找解决此类问题的最佳做法。

谢谢!

【问题讨论】:

  • 我明确希望确保 ModuleC 在我的项目中使用的任何地方都始终相同(我知道子模块机制允许签出不同的版本)。

标签: git dependencies project-management git-submodules


【解决方案1】:

在更大的项目中,您想要的是将所有依赖项保持在 一个 级别。

这并不意味着ModuleAModuleB 不保持对ModuleC 的依赖。

这意味着您当前的主要父 repo 包含对 ModuleC 的依赖项,它充当 C 的引用版本。
这还允许您检测何时必须覆盖依赖项,在您的情况下,对于您的两个子模块之一:ModuleC 的依赖关系 ModuleAModuleB 必须被 @ 覆盖987654329@ 来自您的主仓库。

【讨论】:

    【解决方案2】:

    我们使用Quack 从其他 git 存储库中提取特定模块。我们需要在没有提供存储库的整个代码库的情况下提取代码——我们需要从那个巨大的存储库中获取非常具体的模块/文件,并且每次运行更新时都应该更新。

    所以我们就这样实现了,

    创建配置

    name: Project Name
    
    modules:
      local/path:
        repository: https://github.com/<username>/<repo>.git
        path: repo/path
        branch: dev
      other/local/path/filename.txt:
        repository: https://github.com/<username>/<repo>.git
        hexsha: 9e3e9642cfea36f4ae216d27df100134920143b9
        path: repo/path/filename.txt
    
    profiles:
      setup:
        tasks: ['modules']
    

    通过上述配置,它从提供的 github 存储库中创建一个目录,如第一个模块配置中指定的那样,另一个是从给定的 repo 中提取和创建文件。

    其他开发者只需要运行

    $ quack setup
    

    它从上面的配置中提取代码。

    希望这能解决您重复使用多个模块的问题。

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 2022-08-03
      • 2016-09-10
      • 1970-01-01
      • 2017-08-27
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多