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

发布于 2024-06-29 21:14:54 字数 2313 浏览 35 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
25 人气
更多

推荐作者

夢野间

文章 0 评论 0

doggiejohn

文章 0 评论 0

就此别过

文章 0 评论 0

初见终念

文章 0 评论 0

qq_rvKjBH

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文