Win10 下 git error unable to create file Invalid argument 踩坑实录

原始解决方案参看:https://stackoverflow.com/questions/26097568/git-pull-error-unable-to-create-file-invalid-argument
本问题解决于 2024-02-18,使用 git 版本 2.28.0.windows.1

解决方案

看 Git 抛出的出错的具体信息,比如如下都来自同一个文件夹的情况:

git clone -v "https://github.com/somebody/some-repo.git" "X:\Project\GitHub\somebody\some-repo"

Cloning into 'X:\Projects\GitHub\somebody\some-repo'...
POST git-upload-pack (200 bytes)
remote: Counting objects: 1234, done.
remote: Compressing objects: 100% (456/456), done.
Receiving objects: 100% (1234/1234), 2.70 MiB | 567.00 KiB/s, done.
Resolving deltas: 100% (234/234), done.
remote: Total 1234 (delta 234), reused 0 (delta 0)
Checking connectivity... error: unable to create file repo-root/some-folder/_wrong_filename_1234?ref=users (Invalid argument)
error: unable to create file repo-root/some-folder/_wrong_filename_5678?ref=users (Invalid argument)
error: unable to create file repo-root/some-folder/_wrong_filename_1234?params=test (Invalid argument)
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status' and retry the checkout with 'git checkout -f HEAD'

git did not exit cleanly (exit code 128) (12345 ms @ 1970-01-23 12:34:56)

则在项目路径下,在 git-bash 或 cmd 命令行使用 git config core.sparsecheckout true稀疏检出模式开启

  • 若在 git-bash 下则继续输入如下命令,仅检出除指定目录下所有内容之外的内容:
echo * >> .git/info/sparse-checkout
echo !repo-root/some-folder/* >> .git/info/sparse-checkout
  • 若在 cmd 下则输入:
(ECHO * && ECHO !repo-root/some-folder/*) >> .\.git\info\sparse-checkout

然后就可以重新 git pull 了,这次应该不会报错了。

但是那些文件却也确实不会拉取了,请在编译或执行操作前确认好丢失文件的必要性哦。

多个不同位置的文件

主要看 Checking connectivity... error: unable to create file 后面跟的内容,有一个就加一行到 .git/info/sparse-checkout 文件里,然后重新拉取就好了。

原因

基本上就是 Windows 下 pull 到了别的操作系统(文件系统)下允许但 NTFS 不允许的文件命名格式,如文件名中带有英文 ? 等,此时 pull 或 merge 操作会被中断 Aborting。
那么解决思路是利用 Git 的稀疏检出规则,强行绕过这些可能出错的文件(我不拉了,我摆烂了)
等到那些系统上的提交者(或者你自己在自己的分支上)更新文件命名后再重新 clone 或者 pull(抑或者就此摆烂)

验证

验证稀疏检出是否成功开启,可以在 git-bash 里打开项目文件夹,发现后面会变成形如:

User@MACHINE_NAME MINGW64 ~/my-project (master|SPARSE)
$

的样式,就算成功开启了;
而后你需要打开文件夹选项,选择显示隐藏的项目,或者直接在地址栏的最后追加上\.git\info,检查一下info文件夹下是否有 sparse-checkout;
sparse-checkout文件是否出现
可以右键打开方式为记事本,检查内容是否是:

*
!repo-root/some-folder/*

第一行为通配符,表示任意文件;
第二行 ! 开头表示排除,* 表示通配符,即排除 repo-root/some-folder 路径下的所有文件。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
"unable to create symlink File name too long"错误通常是由于文件名过长导致的。这个错误出现在尝试创建符号链接时,因为文件系统对文件名的长度有限制。 要解决这个问题,你可以尝试以下解决方案: 1. 缩短文件名:如果可能的话,尝试缩短文件名,以确保它在文件系统的限制范围内。 2. 更改文件路径:将文件移动到更短的路径或者更深的目录中,以减少整个文件路径的长度。 3. 使用压缩工具:如果你需要将文件解压缩或者创建符号链接,你可以尝试使用压缩工具(如WinRAR或7-Zip)来解压缩,而不是直接创建符号链接。 4. 更新文件系统:有些文件系统可能对文件名长度有限制,如果你能够升级或更换文件系统,可能会解决这个问题。 5. 使用Git的长路径支持:如果你在使用Git时遇到这个问题,你可以尝试通过运行命令`git config --global core.longpaths true`来启用Git的长路径支持。 请根据你的具体情况选择适合的解决方案,并根据需要进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Git error: unable to create file xxx: Filename too long(使用IDEA 下载git工程出现错误:无法创建文件xxx...](https://blog.csdn.net/zm0997123/article/details/120486390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [linux下unzip解压报错“symlink error: File name too long”怎么办?提供解决方案。](https://blog.csdn.net/yeyiqun/article/details/96941553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学渣戊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值