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

git存储库中的依赖关系管理(使用子模块),git,dependencies,project-management,git-submodules,Git,Dependencies,Project Management,Git Submodules,我有一个相当大的项目,有很多依赖项。项目存储在git存储库中,依赖项存储在作为子模块链接的专用git存储库中。依赖项可以有更多的依赖项(同样,使用git子模块) 这很有效。然而,如果两个依赖项都需要第三个依赖项,我在更新时会遇到麻烦 依赖关系图如下所示: [Main Repo] | |-- [ModuleA] | | | \-- [ModuleC] | \-- [ModuleB] | \-- [ModuleC

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

这很有效。然而,如果两个依赖项都需要第三个依赖项,我在更新时会遇到麻烦

依赖关系图如下所示:

[Main Repo]
  |
  |-- [ModuleA]
  |       |
  |       \-- [ModuleC]
  |
  \-- [ModuleB]
          |
          \-- [ModuleC]
现在我更新ModuleA和ModuleB中的子模块指针。这样,两个模块都保持独立。然而,这是一个很大的工作

在大型项目中,这个问题通常是如何解决的?我正在寻找解决这类问题的最佳实践


谢谢

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

这并不意味着
ModuleA
ModuleB
不保持对
ModuleC
的依赖性

这意味着您当前的主父回购协议包含对
ModuleC
的依赖,它充当
C
的参考版本
这还允许您检测何时必须覆盖依赖项,在您的情况下,对于两个子模块中的一个子模块:
ModuleA
ModuleB
的对
ModuleC
的依赖关系必须被主Repo中的对
ModuleC
的依赖关系覆盖。

我们用于从其他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']
它从上述配置中提取代码


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

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