使用 git 个子模块作为 Windows 中的连接点

Using git submodules as junctions in Windows

如果子模块的目录是联结 (Windows),git 不会将其检测为存储库并且无法在此类子模块上工作。

例如,假设一个存储库 rootc:\src\root 中,它有一个子模块 subrepo,它是另一个驱动器的连接点。所以 c:\src\root\subrepo 链接到 d:\submodules\subrepo.

如果您在 c:\src\root\subrepo 上尝试任何 git 命令,您将收到类似

的错误消息

$ git pull

fatal: not a git repository: d:/submodules/subrepo/../.git/modules/subrepo

我该如何解决这些问题?

如您所见,问题是 git 解析了连接并在目标目录上工作,而不是使用原始路径。

要解决 git 和子模块的连接问题,创建第二个连接就足够了,但是以相反的方式,到父代表的 .git 目录。这应该是subrepo目录的兄弟,所以在构造../.git/相对路径时可以找到。

d:\submodules\.git ==> c:\src\root\.git
c:\src\root\subrepo ==> d:\submodules\subrepo

请注意,如果您有不同的子模块集,这可能会很混乱,因此在这种情况下,只需将它们分组到同一目录中,以避免与重复的 .git 目录发生冲突。