git checkout错误:无法创build文件

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

$ git clone gituser @ serveraddr:/git/git_repo.git git_WA
克隆到“git_WA”…
gituser @ serveraddr的密码:
远程:计数对象:500846,完成。
远程:压缩对象:100%(118676/118676),完成。
远程:共计500846(三angular洲307739),重用483023(三angular洲291136)
接收对象:100%(500846/500846),907.54 MiB | 9.04 MiB / s,完成。
解决三angular洲:100%(307739/307739),完成。

错误:无法创build文件RealR ******************************************* ************************************************** ************************************************** ************************************************** ************* validation.xml(没有这样的文件或目录)
检出文件:100%(441329/441329)
检出文件:100%(441329/441329),完成。
完成。

案例2:克隆为裸回购,从本地裸回购签出=>相同的错误。

案例3:直接克隆C:\中的回购,结账成功,没有错误。

– >它看起来像文件名/文件path长度限制的问题。

案例4:从SVN回购中检出相同的文件。 能够在任何地点结账,没有任何问题。 因此从Windows端没有问题。 (是的,我有SVN和GIT的数据,我只是从SVN迁移到GIT)。

因此,问题必须在msysgit之内,一些文件path长度的限制。 可以修改gitclient / msysgit的path长度吗?

编辑1: 所有的操作尝试与TortoiseGIT客户端v1.8.0git-bash:git版本1.8.0.msysgit.0
编辑2:添加克隆时使用的实际命令。

在将项目签出到具有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 

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

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

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

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

坏处:

  • 你必须改变项目的位置

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

优点:

  • 你可以有长文件名(大于260)
  • 你可以保存项目的位置
  • 初始克隆后,您可以安全地删除连接点(如果您不需要在原始位置使用违反260符号限制的文件)

坏处:

  • 在交界处的完整文件名仍然不得少于260个符号。 否则这个解决方案将无济于事。
  • 如果你想长时间修改文件

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

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

或者至少检查一下在msysgit的git-bash会话中签出的结果是否更好。


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

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

 core.longpaths:: 

在Git for Windows中启用长路径(> 260)支持内置命令。
这是默认禁用的,因为Windows资源管理器,cmd.exe和Git for Windows工具链(msys,bash,tcl,perl …)不支持长路径。
只有当你知道你在做什么,并准备好忍受一些怪癖,才能启用它。

尝试:

 git config --system core.longpaths true 

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

使用Windows PowerShell。 为我工作。