如何清晰地处理复杂的存储库相互依赖性?

时间:2014-02-27 01:11:10

标签: git

假设某人正在开发游戏开发框架。有一个图形渲染项目,一个窗口/上下文处理项目和一个数学库项目。

让我们进一步说开发人员希望将每个部分作为一个单独的存储库,以防有人只是想要一个用于Windows处理的库或者只是想要数学库等。

因此,每个都作为子模块添加到游戏框架中。图形库依赖于数学库,因此它作为子模块添加到图形库中,但现在我们在主框架中有两个数学库副本。好的,所以我们从主框架中删除了数学库,并从图形子模块中获取项目。事情已经开始闻起来了。

更糟糕的是,现在开发人员想要为框架创建一个物理库repo(再次作为它自己的工作仓库,以防有人只需要物理而不是整个巨型框架),除了它还依赖于数学库。

如果没有这种头痛,我们怎么能有这种复杂的监督/模块化?

TL; DR:

game framework ------> graphics, gui, physics, math  
graphics --------------> math  
physics ---------------> math

但每个部分都应该能够独立工作。

where ------> means "is dependent on"

1 个答案:

答案 0 :(得分:1)

为了管理与子模块可能重叠的依赖关系,要遵循的一条好规则是:

  • 声明父仓库中的所有子模块,即包含game frameworkgraphicsphysics(主要仓库)及其依赖关系的仓库({{1 },gui
  • 检查这些子模块的SHA1是否存在任何差异,math为了列出索引并选择1600000 special entry
  • 通过符号链接替换任何子模块文件夹(除非您执行git子模块更新之前不存在)

    git ls-files --stage

这迫使您为每个依赖项选择一个版本。