git存储库中的依赖管理(使用子模块)

时间:2013-11-21 11:04:32

标签: git dependencies project-management git-submodules

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

这很有效。但是,如果两个依赖项同时需要第三个依赖项,则会在更新时遇到麻烦。

依赖关系图如下所示:

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

现在我更新ModuleA和ModuleB中的子模块指针。这样两个模块都是自包含的。但是,这是一项很多工作。

这个问题通常在更大的项目中解决了吗?我正在寻找解决此类问题的最佳实践。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

这并不意味着ModuleAModuleB不会将自己的依赖关系保留到ModuleC

这意味着您当前的主要父回购包含对ModuleC的依赖,该C充当ModuleC的引用版本。
这也允许您检测何时必须覆盖依赖关系,在您的情况下,对于您的两个子模块之一:ModuleAModuleB的{​​{1}}依赖关系必须是被你的主要回购中的ModuleC覆盖。

答案 1 :(得分:0)

我们使用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存储库创建1个目录,另一个是从给定的repo中提取和创建文件。

其他开发人员只需要运行

$ quack setup

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

希望这可以解决重用多个模块的问题。