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 中,您可以启用开发者模式,这将关闭此要求,并且可能会让您作为开发者的生活更轻松一些。
在我的 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 中,您可以启用开发者模式,这将关闭此要求,并且可能会让您作为开发者的生活更轻松一些。