git checkout错误:无法创建文件

时间:2013-02-11 12:33:32

标签: 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.0 git-bash:git版本1.8.0.msysgit.0
Edit2:添加了克隆时使用的实际命令。

5 个答案:

答案 0 :(得分:15)

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

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

我通过签出c:\ git解决了这个问题,长度为6或15个字符,保持最大路径长度低于Windows限制。

答案 1 :(得分:7)

尝试:

git config --system core.longpaths true

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

答案 2 :(得分:5)

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

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

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

缺点:

  • 您必须更改项目位置

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

优势:

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

缺点:

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

答案 3 :(得分:2)

考虑到similar issue,我看到的唯一建议是:

  

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

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


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

注意:latest 2.4.1 git-for-windows proposes

core.longpaths::
  

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

答案 4 :(得分:1)

使用Windows PowerShell。为我工作。