git clone 到 Windows 客户端时出现 error: invalid path
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 保留了某些文件名,因此尝试创建使用保留基本名称的文件将会失败。
请参阅 命名文件 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
,如下 所述 。
根据文件名,配置 Git 以忽略 NTFS 命名可能会解决该问题。
git config --global core.protectNTFS false
关闭后, protectNTFS
Git 将不再抱怨那些具有保留基本名称的文件,但如果文件名是保留名称之一,则不会阻止错误。
唯一的解决方法是在源存储库或通过非 Windows 客户端重命名任何有问题的文件。
core.protectNTFS
实际上配置这个参数会忽略有问题的文件,最终的文件大小可能为 0,请谨慎使用!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Windows 用户权限认证
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论