git - 共享 Git 子模块

标签 git version-control dependencies git-submodules

我有库 A、B、C 和 D。

依赖关系如下所示:

   A
   |
  / \
B     C
 \   /
   D

但是,我们将 B 和 C git repos 设置为 D 作为子模块。我们想将 B 和 C 设置为 A 中的子模块,但我们也希望以某种方式让它们都指向 D 的单个子模块实例。

有谁知道正确的方法吗?

最佳答案

如果将B和C作为子模块添加到A中,它们的.git文件将存储在A中的.git/modules/B和.git/modules/C下。但是,其中每一个(一旦你完成了 git submodule init; git submodule update)都会有自己的 .git/modules/D,所以 repo 文件不会被共享。每个人也将拥有自己的文件 check out 副本。

您可以使用符号链接(symbolic link)解决这些问题。例如,您可以将 D 作为子模块仅添加到 B,然后在 C 中符号链接(symbolic link) B 的 D。现在您可以在 B/D 或 C/D 中工作,另一个将保持同步。但是,这有两个问题。首先是你不能检查每个点的不同点——它们必须保持同步,因为它们是同一件事。不过,这是次要的,甚至可能符合您的意愿。第二个更糟;如果你只在 B 中跟踪 D,而 C 只是通过指向 B 的 D 的符号链接(symbolic link)来“跟踪”它(符号链接(symbolic link) are 被 git 理解,顺便说一句),那么 C 就没有办法管理自己的对 D 的依赖。

对子模块进行更改然后在依赖的包含 repo 中检查该更改是正常的,但现在你必须记住跳转到菱形中的另一个 repo 并确保也有效(自动化测试 - 特别是如果通过 git hook 运行 - 在这里可以提供很多帮助)。如果你在 B/D 中恢复一个提交,例如,或者检查一个旧的提交,或者在 B/D 中切换分支,你必须总是跳到 C/D 并确保那里的东西仍然有效。这种设置可能会带来一些微观管理上的痛苦,容易导致提交中断,其中 B 针对当前的 D 工作,但 C 不工作,反之亦然。

关于git - 共享 Git 子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989135/

相关文章:

Windows 到 Ubuntu 的 git 连接

android - 是否可以在同一个源代码管理和 IDE 中管理 NokiaX 和 Android 源代码?

java - 包P1和P2有依赖循环,但是P1的类没有使用P2(通过jdepend分析)

java - 如何为 maxmind geoip2 eclipse 添加依赖项

git - 如何将子模块粘贴到修复标签上?

git - golang中的版本控制第三方包

git - 在 Visual Studio Code 中更改 Git 用户

带有远程标签的 Git diff

version-control - bzr merge - 在提交之前审查另一个分支提交说明 ('merge tips' )

GitHub:有没有办法以编程方式提交问题?