Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows git签出错误:无法创建文件_Windows_Git_Filepath_Git Checkout - Fatal编程技术网

Windows git签出错误:无法创建文件

Windows git签出错误:无法创建文件,windows,git,filepath,git-checkout,Windows,Git,Filepath,Git Checkout,将git存储库从Linux克隆到Windows系统时,我在签出阶段遇到以下错误: $git克隆gituser@serveraddr:/git/git\u repo.git git\u WA 克隆到“git_WA”… gituser@serveraddr的密码: 远程:计数对象:500846,完成。 远程:压缩对象:100%(118676/118676),完成。 远程:总计500846(增量307739),重复使用483023(增量291136) 接收对象:100%(500846/500846),

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

$git克隆gituser@serveraddr:/git/git\u repo.git git\u WA
克隆到“git_WA”…
gituser@serveraddr的密码:
远程:计数对象:500846,完成。
远程:压缩对象:100%(118676/118676),完成。
远程:总计500846(增量307739),重复使用483023(增量291136)
接收对象:100%(500846/500846),907.54 MiB | 9.04 MiB/s,完成。
解析三角洲:100%(307739/307739),完成

错误:无法创建文件,无法创建文件,无法创建文件,无法创建文件文件,无法无法创建文件文件,无法创建文件,无法无法创建文件,无法无法创建文件,无法无法创建文件,无法无法无法创建文件,无法无法无法创建文件,无法无法无法创建文件文件,无法无法无法创建文件,无法无法无法创建文件,无法无法无法无法创建文件,无法无法无法无法无法无法无法无法创建文件,无法无法无法无法无法无法无法创建文件,无法无法无法无法无法无法无法创建文件,无法无法无法无法无法无法创建文件,无法无法无法无法无法无法无法创建文件,无法无法无法无法无法无法创建文件,无法无法无法无法无法无法创建文件,无法无法无法无法无法无法无法创建文件,无法无法无法无法无法无法创建文件,无法无法无法无法无法创建文件,无法无法无法无法无法无法创建文件,无法无法无法无法创建文件,无法无法无法无法无法创建文件,无法无法无法无法无法无法无法创建文件,无法无法无法无法无法无法创建文件,无法无法无法无法无法无法无法无法创建文件,无法无法创建文件,无法无法无法无法无法********************************validation.xml(无此类文件或目录)
签出文件:100%(441329/441329)
签出文件:100%(441329/441329),完成。
完成了

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

案例3:直接在C:\中克隆回购,签出成功,无错误

->文件名/文件路径长度限制似乎有问题

案例4:从SVN repo签出相同的文件。能够在任何地点结帐,没有任何问题。因此,在windows方面没有问题。(是的,我在SVN和GIT中都有数据,我刚刚从SVN迁移到GIT)

因此,问题必须在msysgit范围内,即某些文件路径长度限制。gitclient/msysgit中的路径长度可以调整吗

Edit1:TortoiseGIT client v1.8.0和git bash:git version 1.8.0.msysgit.0尝试的所有操作
Edit2:添加了克隆时使用的实际命令。

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

解决方法:使用

或者至少检查msysgit中的签出是否工作得更好


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

注:报告如下:

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


在将项目签出到具有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
git签出-f头
错误:无法创建文件(没有此类文件或目录)
致命:无法在“”处创建目录:没有此类文件
或目录

我通过将git存储库签出到c:\git解决了这个问题,该存储库的长度为6或15个字符,将最大路径长度保持在Windows限制之下。

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

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

  • 一切正常(假设没有路径超过260的文件)
缺点:

  • 您必须更改项目位置
解决方法2:从靠近磁盘根目录的文件夹创建一个到项目文件夹的git克隆,并从junction文件夹执行git克隆。您可以使用
mklink
命令或

优点:

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

  • 连接处的完整文件名仍然必须少于260个符号。否则,这个解决方案将无济于事
  • 如果要修改具有长字符串的文件

使用Windows PowerShell。为我工作。

试试:

git config --system core.longpaths true

这将允许它签出文件,即使文件路径较长。问题是当您尝试删除它时,Windows将不允许删除长度超过允许阈值的路径。解决方法是重命名本地存储库中的文件夹,从而缩短路径的总长度。例如,可以将路径alpha/beta/gamma/universe.txt限制为1/2/3/universe.txt,使其长度低于windows文件大小阈值。

我已经在git bash中尝试了所有这些操作:git版本1.8.0.msysgit.0和内部使用相同msysgit的TortoiseGIT客户端v1.8.0。用相同的信息编辑了问题。@rohit cygwin将提供完全不同的环境,该环境应支持更长的路径长度()。基于Windows的git客户端无法获取Windows路径长度限制的路径。我已经尝试使用git bash,它总是在cygwin环境中运行。此外,我的系统上安装了独立的cygwin。因此,他也尝试了与cygwin结帐,但面临着完全相同的问题。我哪里做错了。@rohit:注意,我的理解是gitbash不同于cygwin(再次)。但是同样的限制也可能适用(),事实上。从具有提升权限的Git Bash运行(以管理员身份运行)这对我来说是个问题。这个问题的一个很好的指标是,一个具有特别长名称的文件将在其他文件成功后失败。或者,您可以更改注册表以允许更长的路径:当文件具有特殊字符时。提到
git config --system core.longpaths true