2014-02-27 28 views
3

假设有人正在开发游戏开发框架。有一个图形渲染项目,一个窗口/上下文处理项目和一个数学库项目。如何干净地处理复杂的存储库相互依赖性?

让我们进一步说,开发商想有每个部分作为一个独立的存储设备,以防有人只是想一个图书馆办理窗口或只是想数学函数库等

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

为了让事情变得更糟,现在开发人员想要制作一个物理库回购(再次,因为它自己的工作回购,以防有人只想要物理而不是整个巨型框架),除了它也取决于数学库。

怎么能有这种复杂的监督/模块化没有这种头痛?

TL;博士:

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

但每个部分应该能够对自己的工作。

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

回答

1

一个很好的规则,以便与子模块来管理潜在的重叠的依赖关系,遵循的是:

  • 声明所有子模块在父回购,这是一个回购协议,其中将包括game frameworkgraphicsphysics (主要回购)以及它们的依赖关系(gui,math
  • 检查这些子模块的SHA1是否存在任何差异,通过git ls-files --stage来列出指数和挑1600000 special entry
  • 更换任何子模块文件夹(直到你做一个混帐子模块更新,其中不存在)的一个符号

    parent repo 
        game framework ------> graphics (ln -s ../graphics) 
           ------> gui (ln -s ../gui), 
           ------> physics (ln -s ../physics), 
           ------> math (ln -s ../math) 
        graphics ------------> math (ln -s ../math) 
        physics -------------> math (ln -s ../math) 
        gui 
        math 
    

,迫使你挑一个版本每个依赖。