git pull中止,错误文件名太长


114

我使用Windows作为操作系统,并与使用Mac的朋友一起进行项目。他在我们的Github中检入了代码。

我试图用git拉扯他所做的一切,但由于第三方代码的“文件名太长”错误而中止。

我能做什么?


该问题有两种主要不同的情况,具体取决于您的操作。如果存储库已经存在,则可以编辑其配置。但是如果没有?对于通过创建新目录进行克隆/签出,仅@AlexRosenfeld的答案会有所帮助。
Gangnus

Answers:


200

Git上的msysgit常见问题解答无法创建路径较长的文件目录,因为它仍链接到旧的msysgit 凭单#110,因此它似乎不是最新的。但是,根据后来的故障单#122,该问题已在msysgit 1.9中修复,因此:

  1. 更新到msysgit 1.9(或更高版本)
  2. 启动Git Bash
  3. 转到您的Git存储库,这会“困扰”长距离问题
  4. 通过以下方式启用长路径支持 git config core.longpaths true

到目前为止,它对我来说非常有效。

请注意在票证上的重要通知#122

不要回到这里并抱怨它破坏了Windows资源管理器,cmd.exe,bash或您使用的任何工具。


更新了一些,看起来在安装mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Adam Grant

18
真正起作用的是:git config --global core.longpaths true
安东·

@AntonAndreev是的,如果您希望在全局范围内进行设置,那就可以了。每个存储库的本地范围也是完全有效的。
mloskot

如果不将其设置在全球范围内,它对我不起作用。
安东·安德烈耶夫

1
这种方式不适用于创建新目录的克隆/签出。只有@AlexRosenfeld的答案会有所帮助。
Gangnus

69

解决方案 1-通过运行以下命令来设置全局配置:

git config --system core.longpaths true

Solution2-或者您可以直接编辑特定的git配置文件,如下所示:

YourRepoFolder-> .git-> config:

[core]
    repositoryformatversion = 0
    filemode = false
    ...
    longpaths = true        <-- (add this line under core section)

解决方案 3-克隆新存储库时:此处


1
这种方式不适用于创建新目录的克隆/签出。只有@AlexRosenfeld的答案会有所帮助。
Gangnus

我用那个更新了答案,谢谢。
丹尼尔·哈里(DanielHári)'17年

26

迟了几年,但是我想补充一点,如果您需要一口气做到这一点(就像我一样),则可以在clone命令期间设置配置设置。试试这个:

git clone -c core.longpaths=true <your.url.here>

1
队友的欢呼声!当从github克隆一个新目录时,这非常有用。
杰伊·基林

没问题,它帮助了!
xandermonkey '16

1
是! 这个,以及用于克隆-仅此一个有效!
Gangnus

这不起作用,我的克隆仍然被中止。我正在使用git version 1.8.4.msysgit.0,有什么主意吗?
Simple-Solution

似乎已弃用。也许尝试使用git-scm?你得到什么错误?
xandermonkey

12

打开your.gitconfig文件以添加longpaths属性。因此,它将类似于以下内容:

[core]
symlinks = false
autocrlf = true
longpaths = true

1
这种方式不适用于创建新目录的克隆/签出。只有@AlexRosenfeld的答案会有所帮助。
Gangnus

6

由于有人在Windows上的Java存储库中经常遇到此问题,因此最好的解决方案是安装Cygwin(https://www.cygwin.com/),并在all> devel> git下使用其git安装。

这是我遇到的最佳解决方案的原因是,因为Cygwin管理长路径名,因此其他提供的命令也会受益。例如:查找,cp和rm。相信我,当您必须删除Windows中太长的路径名时,真正的问题就开始了。


4

尝试使文件更靠近文件系统根目录。更多详细信息:出于技术原因,当绝对路径长于260个字符时,Windows的Git无法创建文件或目录


似乎只能默认到130 [也许Windows在下面使用双字节unicode字符] [?]
rogerdpack 2014年

5
更多的人应该敦促Microsoft更改此限制(并修复他们破坏的旧版API)。当文件名被限制为<8>。<3>字符时,我们没有理由再忍受这一剩余的日子。如果不立即修复,则会挖出更大的孔。固定斜线方向。
cchamberlain

@cchamberlain C:/ foo / bar / baz是完全有效的,尽管\ foo \ bar \ baz也是有效的(它将引用当前工作目录所在的任何逻辑驱动器)/ foo / bar / baz可能与命令行标志。
2015年

@JAB-的确,有时正斜杠会起作用,但正如您所指出的那样,这是不可靠的。cmd.exe将以一种方式做出反应,并通过powershell进行另一种方式。自动完成休息。底层API可以理解,但cmd.exe并非在所有情况下都可以,反斜杠的更安全使用会导致有时需要转义字符串。已有足够的命令行反斜杠垃圾以及常见Windows路径中存在的空格和括号的数量。
cchamberlain

2
这不是解决方案。技术应该是人的仆人,而不是人应该是技术的仆人。
DanielHári2015年

4

在Windows上,以管理员身份运行“ cmd”并执行命令。

"C:\Program Files\Git\mingw64\etc>"
"git config --system core.longpaths true"

或者您必须在安装了git的文件夹中使用chmod。

或通过路径“ Git \ mingw64 \ etc”手动更新文件

[http]
    sslBackend = schannel
[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[credential]
    helper = manager
**[core]
    longpaths = true**
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.