我有库 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/