分享Git子模块

4

我有A、B、C和D四个库。

依赖关系如下:

   A
   |
  / \
B     C
 \   /
   D

然而我们已经设置了B和C的git仓库,其中D是一个子模块。我们希望在A中设置B和C作为子模块,但同时也想让它们都指向一个单独的D子模块实例。

有人知道正确的做法吗?

1个回答

0
如果您将B和C作为子模块添加到A中,则它们的.git文件将存储在A下的.git/modules/B和.git/modules/C中。一旦您在每个子模块中执行了“git submodule init; git submodule update”,它们各自都会有自己的.git/modules/D,因此仓库文件不会共享。每个子模块也将拥有自己的已检出文件副本。
您可以通过符号链接解决这些问题。例如,您可以仅将D作为子模块添加到B中,然后在C中将B的D链接为符号链接。现在,您可以在B/D或C/D中工作,并且另一个将保持同步。但是,这里有两个问题。第一个问题是您无法在每个子模块中检出不同的点-它们必须保持同步,因为它们是相同的内容。尽管如此,这只是小问题,甚至可能符合您的愿望。第二个问题更糟糕;如果您仅在B中跟踪D,并且C仅通过符号链接跟踪B的D(顺便说一下,git确实理解符号链接),那么C就没有办法控制其对D的依赖关系。

对于子模块进行更改然后检查该更改是否影响了依赖它的存储库是很正常的,但现在你必须记得进入菱形结构中的另一个存储库并确保它也能正常工作(自动化测试 - 特别是通过git钩子运行 - 可以在这方面提供很大帮助)。如果您还原了B/D中的提交,例如,或者检出旧的提交,或者在B/D中切换分支,则必须始终跳转到C/D并确保它仍然能够正常工作。这种设置可能会成为一种微观管理疼痛,容易导致损坏提交,其中B针对当前的D进行操作,但是C不行,反之亦然。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接