是插件或依赖项的子模块吗?

时间:2010-07-14 23:42:16

标签: git git-submodules

假设Project X是基础项目,而Project Y依赖于X. Project Y可能是Project X的插件,或者它可能是一个独立的应用程序,需要Project X以其他方式。

我一直以为项目Y应该是超级项目,而项目X应该是项目Y的子模块。

然而,在阅读this后,似乎我的想法可能会被颠倒过来。在本文中,依赖项是超级项目,依赖代码(在本例中为插件)是子模块。这是使用子模块的正确方法吗?

2 个答案:

答案 0 :(得分:3)

这取决于,但在一般情况下,我会说两个子模块都是(或可以)。

显然,如果Project Y是Project X的依赖项(例如,外部库),它应该是一个子模块。

但子模块不仅适用于依赖项,而且适用于作为半独立开发的项目组件的项目。插件就是这样一个组件:它是独立开发的,但您可能希望将其与项目源一起打包。

答案 1 :(得分:2)

如果ProjectY可以在不知道任何关于ProjectX的情况下生活(可能是它是X的插件),它不能是一个超级项目。

如果它需要X以某种方式完成,那么是的,它可能是一个超级项目,以便在其树中引用X(如true nature of submodules中所述)。

component-based approach中,真正的超级项目将是第三个项目,它引用正确版本的ProjectY ProjectX,以便记录所需的确切配置(即修订列表)整个项目的工作。


OP添加了正确的问题:在哪里存储依赖关系(Y在X上)?

  

如果采用基于组件的方法并且具有ProjectZ超级项目,并且ProjectY依赖于ProjectX来构建,那么我们是不是将ProjectX作为子模块包含在ProjectY的存储库中,而只包含在ProjectZ中?   这意味着ProjectY无法自行构建,使其(缺乏口才)成为一种“隐含的子模块”。

如果你只有2个组件,一个取决于另一个组件,请确保:你可以直接将ProjectX声明为ProjectY的子模块。

但是如果ProjectY不能单独构建,那么它无论如何都不是“完整的”(如“自主”)项目。
因此,全局父“ProjectZ”将ProjectY之外的依赖信息存储在其中具有以下优点:

  1. 直接从ProjectZ根目录中保持每个模块路径更加可见(而不是将ProjectX潜在地隐藏在ProjectY中,使得该依赖项对ProjectY客户端不太可见)
  2. 统一ProjectX版本(如果有几个模块需要ProjectX,在ProjectZ中引用一次就会明确宣传所有其他模块应该使用的ProjectX的“一个正式版本”)