当前位置: 首页 > news >正文

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 路径下的所有文件。

http://www.lryc.cn/news/332674.html

相关文章:

  • 简化备案域名查询的最新API接口
  • 基于SpringBoot和Vue的校园周边美食探索以及分享系统
  • TiDB单机版安装和连接访问
  • Spark-Scala语言实战(13)
  • Android compose 使用指纹验证
  • 开源模型应用落地-chatglm3-6b模型小试-入门篇(一)
  • C++实现单例模式
  • 虚幻UE5智慧城市全流程开发教学
  • docker的安装及入门指令
  • 聚能共创下一代智能终端操作系统 软通动力荣膺“OpenHarmony优秀贡献单位”
  • 云服务器ECS租用价格表报价——阿里云
  • 光猫桥接模式详细步骤
  • 构建开源可观测平台
  • SketchUp Pro 2024 for mac 草图大师 专业的3D建模软件
  • 通过 Cookie、Redis共享Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(三)
  • 学习 Git 基础知识 - 日常开发任务手册
  • pip和conda 设置安装源
  • 数据分析之Logistic回归分析中的【多元有序逻辑回归】
  • 路由器拨号失败解决方法
  • Oracle 中 where 和 on 的区别
  • NLP学习路线总结
  • AI绘图cuda与stable diffusion安装部署始末与避坑
  • OpenCv —— cv::VideoCapture设置摄像头图像格式为“MJPEG“
  • Qt事件学习案例
  • 无锡国家集成电路设计中心某公司的单锂小电机直流电机H桥驱动电路
  • 数据分析 -- numpy
  • 开源项目生存现况:xz投毒事件引发的思考与GNU tar维护挑战
  • 前端开发语言有哪些
  • 速盾:cdn加速https额外收费吗?
  • 【蓝桥杯嵌入式】13届程序题刷题记录及反思