您当前的位置:首页 > 计算机 > 系统应用 > Windows

git clone 到 Windows 客户端时出现 error: invalid path

时间:12-14来源:作者:点击数:
CDSY,CDSY.XYZ

Git 克隆存储库在 Linux 客户端上成功,但在 Windows 客户端上失败,并出现 error: invalid path ​​ 错误。Windows 操作系统保留了一些文件名,因此文件名在 Linux 中可能合法,但在 Windows 中却不合法。

诊断

该错误将在 git clone/fetch 期间的最终签出期间出现。作为示例,我们尝试克隆包含 con.h 文件名的存储库。

$ git clone --progress --verbose      ssh://git@mybb.com:7999/project/myrepo.git     
Cloning into 'myrepo'...
remote: Enumerating objects: 825542, done.
remote: Counting objects: 100% (825542/825542), done.
remote: Compressing objects: 100% (239771/239771), done.
remote: Total 1414136 (delta 769602), reused 586108 (delta 585739), pack-reused 588594
Receiving objects: 100% (1414136/1414136), 13.91 GiB | 22.80 MiB/s, done.
Resolving deltas: 100% (1132339/1132339), done.
error: invalid path 'path/to/broken/file/con.h'
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

路径似乎没什么问题。问题是文件的基本名称是 con Windows 中的保留名称。

原因

Windows 保留了某些文件名,因此尝试创建使用保留基本名称的文件将会失败。

请参阅 命名文件( docs.microsoft /en-us/windows/win32/fileio/naming-a-file) Windows 文档:

请勿使用以下保留名称作为文件名称:

CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9。还应避免在这些名称后紧跟扩展名;例如,不建议使用 NUL.txt。

解决方案

虽然这可以解决这个问题,但应该小心,因为 Windows 客户端的默认设置为 core.protectNTFS=true 关闭潜在的安全问题 CVE-2019-1353 ,如下 所述( github /git/git/commit/9102f958ee5254b10c0be72672aa3305bf4f4704) 。

根据文件名,配置 Git 以忽略 NTFS 命名可能会解决该问题。

git config --global core.protectNTFS false

关闭后, protectNTFS Git 将不再抱怨那些具有保留基本名称的文件,但如果文件名是保留名称之一,则不会阻止错误。

唯一的解决方法是在源存储库或通过非 Windows 客户端重命名任何有问题的文件。

core.protectNTFS 实际上配置这个参数会忽略有问题的文件,最终的文件大小可能为 0,请谨慎使用!!!

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐