使用 git 个子模块作为 Windows 中的连接点
Using git submodules as junctions in Windows
如果子模块的目录是联结 (Windows),git 不会将其检测为存储库并且无法在此类子模块上工作。
例如,假设一个存储库 root
在 c:\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
目录发生冲突。
如果子模块的目录是联结 (Windows),git 不会将其检测为存储库并且无法在此类子模块上工作。
例如,假设一个存储库 root
在 c:\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
目录发生冲突。