如何使用子模块和n层git存储库策略

时间:2011-07-06 09:10:47

标签: git git-submodules relative-url

我们正在迁移到git。我们有大量的模块构成我们的产品,其中一些模块在产品之间共享。该产品由“瘦”超级存储库(ssh://server/product.git)表示,该存储库仅包含子模块:

[submodule "module1"]
path=module1
url=ssh://server/product/module1.git
[submodule "module2"]
path=module2
url=ssh://server/product/module2.git
...

我可以克隆超级存储库并使用子模块并提交它们,然后将子模块提交到超级存储库。

当我想引入另一层时问题出现了。有两种基本方案(这可以组合起来制作更复杂的设置,但任何东西都应该是这些的组合):

  1. 作为开发人员,我克隆了一个中央存储库并开始工作。然后我想将我的代码提交到我们的持续集成服务器,然后再将我的更改合并到中央存储库。我让CI服务器克隆我的repo。这不起作用,CI服务器将克隆我的超级仓库,然后它将从中央存储库位置克隆子模块(因为这就是它在.gitmodules中所说的内容)。

  2. 作为一个团队,我们希望在sprint结束之前将我们的代码合并到中央存储库之前,我们需要一个集成存储库。出于同样的原因,这失败了。

  3. 我尝试为子模块指定相对URL,但这也不起作用,因为当我们将第二层克隆到第三层时,相对URL相对于第二层存储库位置解析,但第二层子模块位置在第二层超级存储库中。

    我可以同时拥有它吗? Git子模块和n层存储库结构?

2 个答案:

答案 0 :(得分:0)

相对链接在子模块中不起作用。使用gitolite来存放所有存储库。那么你的结构就可以了。

其他网址也存在问题。示例可以是针对子模块的..\someotherrepo\\servername\reponame或甚至file:///\\server\...等网址。

答案 1 :(得分:0)

如果我理解正确,您希望在其他子模块中安装git子模块,并且能够检出顶级存储库并检查所有 n 层嵌套子模块正确?

我自己从未这样做过,但你可能会发现Git submodule inside of a submodule (nested submodules)读得很好。