这里提出了类似的问题,但缺乏对其发生原因的调查,而且答案太笼统: 如何使用指向子模块中文件夹的 Windows 符号链接正确进行 git 克隆
示例存储库:https://github.com/Zergatul/symlink-test
java-scripting-language
目录的根目录中有子模块scripting -> java-scripting-language\src\main\com\zergatul\scripting
当我在启用符号链接(core.symlinks = true)的情况下运行
git clone --recurse-submodules https://github.com/Zergatul/symlink-test.git
时,会发生这种情况:
要解决此问题,我可以在添加符号链接之前签出存储库,然后签出回 HEAD:
git checkout 92b072cb536f4628eba0f9b70143e2010163ac58
git switch master
以上 2 个命令修复符号链接。
但这可以做得更干净吗?如果我们可以覆盖默认的 Git 行为并告诉它在路径指向任何地方时创建目录符号链接,也许会很好?老问题建议设置克隆钩子,但对于公共开源存储库来说它看起来不太好,因为公共开源存储库应该很容易克隆和构建。
Windows 版 Git 在
.gitattributes
中有一个特殊的扩展,可让您指定符号链接是文件还是目录。例如:
*.gif symlink=file
tools_folder symlink=dir
请注意,这在其他操作系统上会被忽略,因为它们不会遇到此问题。