git checkout错误:无法创建文件

roh*_*hit 18 windows git filepath git-checkout

在将git存储库从Linux克隆到Windows系统时,我在结帐阶段遇到以下错误:

$ git clone gituser @ serveraddr:/git/git_repo.git git_WA
克隆到'git_WA'...
gituser @ serveraddr的密码:
remote:计数对象:500846,完成.
remote:压缩对象:100%(118676/118676),完成.
远程:总计500846(delta 307739),重用483023(delta 291136)
接收物体:100%(500846/500846),907.54 MiB | 完成9.04 MiB/s.
解决增量:100%(307739/307739),完成.

错误:无法创建文件RealR**************************************************************************************************************************************************************************************************************validation.xml(没有这样的文件或目录)

出文件:100%(441329/441329)签出文件:100%(441329/441329),完成.
完成.

案例2:克隆为裸仓库,从本地裸仓库中检出全部=>相同的错误.

案例3:直接克隆C:\中的仓库,结账成功,无错误.

- >看起来像文件名/文件路径长度限制的问题.

案例4:从SVN repo签出相同的文件.能够在任何位置结账,没有任何问题.因此从Windows端没有问题.(是的,我在SVN和GIT中都有数据,我只是从SVN迁移到GIT).

因此,问题必须在msysgit内,一些文件路径长度限制.可以调整gitclient/msysgit中的路径长度吗?

Edit1:所有操作都尝试使用TortoiseGIT客户端v1.8.0git-bash:git版本1.8.0.msysgit.0.
Edit2:添加了克隆时使用的实际命令.

小智 16

将项目签出到具有67-(Windows)或76-(cygwin)字符库路径的Windows目录时,我遇到了类似的问题 - 当添加到签出文件的路径长度时,它超出了Windows的路径 - 长度限制:

git checkout -f HEAD
error: unable to create file <194-character filepath> (No such file or directory)
fatal: cannot create directory at '<187-character directory path>': No such file
or directory
Run Code Online (Sandbox Code Playgroud)

我通过签出c:\ git解决了这个问题,它以6或15个字符长度保持最大路径长度在Windows限制之下.


Waq*_*hah 10

尝试:

git config --system core.longpaths true
Run Code Online (Sandbox Code Playgroud)

这将允许它检查文件,即使文件路径较长.这个问题就是当你尝试删除它时,因为Windows不允许删除超过允许阈值的路径.解决方法是重命名本地存储库中的文件夹,以减少路径的总长度.例如,alpha/beta/gamma/universe.txt的路径可以限制为1/2/3/universe.txt,因此它的长度在windows filesize阈值之下.

  • 从具有较高特权的Git Bash运行(以管理员身份运行) (2认同)

Ale*_*pov 5

许多Windows API限制为260个符号用于文件路径名.因此git无法创建名称超过260个符号的文件.NTFS文件系统实际上支持更长的名称(32k),但没有简单的方法来允许程序的长名称.

解决方法1:将项目移动到更靠近磁盘根目录的新位置.优点:

  • 一切都应该工作正常(假设没有路径更长的文件260)

坏处:

  • 您必须更改项目位置

解决方法2:从更靠近磁盘根目录的文件夹创建项目文件夹的Junction,并从联结文件夹执行git clone.您可以使用mklink命令或链接Shell扩展来执行此操作.

优点:

  • 您可以拥有长文件名(大于260)
  • 您可以保留项目位置
  • 您可以在初始克隆后安全地删除联结(如果您不需要处理在原始位置违反260符号限制的文件)

坏处:

  • 交叉点的完整文件名仍然必须少于260个符号.否则此解决方案将无济于事.
  • 如果要用long修改文件


Von*_*onC 2

考虑到类似的问题,我看到的唯一建议是:

解决方法:使用http://www.cygwin.com/

或者至少检查msysgit 的git-bash 会话中的结帐是否效果更好。


2015 年 5 月更新(2 年后):

注意:最新的 2.4.1 git-for-windows 建议

core.longpaths::
Run Code Online (Sandbox Code Playgroud)

在 Windows 版 Git 中启用对内置命令的长路径 (> 260) 支持。
默认情况下禁用此功能,因为 Windows 资源管理器、cmd.exe 和 Git for Windows 工具链(msys、bash、tcl、perl...)不支持长路径。
仅当您知道自己在做什么并准备好忍受一些怪癖时才启用此功能。