Git 将联结克隆为普通文件夹

Git clones junctions as normal folder

在我的 python 包 (my_package) 中,我使用了几个子模块(依赖包),它们是 my_package 的要求。为了保持结构整洁,我使用了子模块源文件的连接:

repo
    |-- README.md
    |-- setup.py
    |-- my_package
    |       +-- *.py
    |-- submodules
    |       |-- <requirement1>
    |       |-- README.md
    |       +-- <requirement1_sources>
    +-- <requirement1_sources> -> submodule/<requirement1>/<requirement1_sources>

连接是使用 mklink 创建的:

mklink /J <requirement1_sources> submodule/<requirement1>/<requirement1_sources>

在我的回购协议中,一切正常,子模块更新和包构建按预期工作。但是,克隆这样的存储库不起作用,因为 连接被克隆为常规文件夹并且它们的内容不会更新,因为它现在包含来自子模块 的文件副本。我正在像这样克隆回购协议: git clone -c core.symlinks=true --recurse-submodules

将联结转换为目录符号链接 (mklink /D) 可行,但它需要提升提示。 任何帮助表示赞赏。

Git 不知道如何存储联结,因此,它将它们视为常规目录。这不仅限于 Windows 特定项目,例如路口;它也不存储硬链接,或者在 Linux 上标记绑定装载。

请注意,联结不是符号链接,因此,core.symlinks 对它们没有影响。

正确的做法是使用符号链接。但是,正如您正确指出的那样,在许多情况下这需要提升权限。幸运的是,在 Windows 10 中,您可以启用开发者模式,这将关闭此要求,并且可能会让您作为开发者的生活更轻松一些。