符号链接指向 Windows 上的子模块时出现 Git 克隆问题

问题描述 投票:0回答:1

这里提出了类似的问题,但缺乏对其发生原因的调查,而且答案太笼统: 如何使用指向子模块中文件夹的 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
时,会发生这种情况:

  • Git 首先克隆主仓库
  • Git 看到符号链接。现在它取决于文件系统。 NTFS 有两种类型的符号链接:文件和目录。类 Unix 文件系统,例如 ext4 或 HFS+,只有单一类型的符号链接,因此 Git 只为它们创建普通的符号链接。在使用 NTFS 的 Windows 上,Git 检查符号链接指向的路径。如果路径指向文件,Git 创建文件符号链接,如果路径是目录 - 它创建目录符号链接。如果目标路径指向任何地方,Git 默认创建文件符号链接。由于子模块尚未出现,Git 创建文件符号链接。
  • Git 克隆子模块
  • 现在文件符号链接指向目录,使其在 Windows 中无效

要解决此问题,我可以在添加符号链接之前签出存储库,然后签出回 HEAD:

git checkout 92b072cb536f4628eba0f9b70143e2010163ac58
git switch master

以上 2 个命令修复符号链接。

但这可以做得更干净吗?如果我们可以覆盖默认的 Git 行为并告诉它在路径指向任何地方时创建目录符号链接,也许会很好?老问题建议设置克隆钩子,但对于公共开源存储库来说它看起来不太好,因为公共开源存储库应该很容易克隆和构建。

git git-submodules symlink git-clone
1个回答
0
投票

Windows 版 Git 在

.gitattributes
中有一个特殊的扩展,可让您指定符号链接是文件还是目录。例如:

*.gif symlink=file
tools_folder symlink=dir

请注意,这在其他操作系统上会被忽略,因为它们不会遇到此问题。

© www.soinside.com 2019 - 2024. All rights reserved.