假设某人正在开发游戏开发框架。有一个图形渲染项目,一个窗口/上下文处理项目和一个数学库项目。
让我们进一步说开发人员希望将每个部分作为一个单独的存储库,以防有人只是想要一个用于Windows处理的库或者只是想要数学库等。
因此,每个都作为子模块添加到游戏框架中。图形库依赖于数学库,因此它作为子模块添加到图形库中,但现在我们在主框架中有两个数学库副本。好的,所以我们从主框架中删除了数学库,并从图形子模块中获取项目。事情已经开始闻起来了。
更糟糕的是,现在开发人员想要为框架创建一个物理库repo(再次作为它自己的工作仓库,以防有人只需要物理而不是整个巨型框架),除了它还依赖于数学库。
如果没有这种头痛,我们怎么能有这种复杂的监督/模块化?
TL; DR:
game framework ------> graphics, gui, physics, math
graphics --------------> math
physics ---------------> math
但每个部分都应该能够独立工作。
where ------> means "is dependent on"
答案 0 :(得分:1)
为了管理与子模块可能重叠的依赖关系,要遵循的一条好规则是:
game framework
,graphics
,physics
(主要仓库)及其依赖关系的仓库({{1 },gui
)math
为了列出索引并选择1600000 special entry 通过符号链接替换任何子模块文件夹(除非您执行git子模块更新之前不存在)
git ls-files --stage
这迫使您为每个依赖项选择一个版本。