git拉取失败,错误提示为文件名过长。

128
我正在使用Windows作为我的操作系统,并与一位使用Mac的朋友合作完成一个项目。他将代码检入了我们的Github。
我试图git pull他所做的所有事情,但在处理第三方代码时出现了“文件名太长”的错误。
我该怎么办?

那个问题有两种基本不同的情况,取决于您的操作。如果存储库已经存在,您可以编辑其配置。但如果不存在呢?对于克隆/检出并创建新目录,只有@AlexRosenfeld的答案才能帮助。 - Gangnus
7个回答

224

msysgit FAQ中关于Git无法创建长路径的文件/目录的问题似乎不是最新的,因为它仍然链接到旧版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或其他你正在使用的工具。”

22
实际有效的方法是:git config --global core.longpaths true。 - Anton Andreev
@AntonAndreev 如果您希望将其设置为全局范围,那么可以。每个存储库的本地范围也是完全有效的。 - mloskot
没有在全局级别设置它,它对我不起作用。 - Anton Andreev
@AntonAndreev,msysgit文档并没有说核心长路径只在全局级别工作,相反,它在存储库级别显示了示例。https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path 如果对您不起作用,我建议向msysgit报告错误。 - mloskot
1
那种方式无法克隆/检出并创建新目录。只有@AlexRosenfeld的答案能够帮助。 - Gangnus
显示剩余2条评论

81

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

git config --system core.longpaths true

解决方案2 - 或者你可以像下面这样直接编辑你特定的git配置文件:

YourRepoFolder -> .git -> config:

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

Solution3 - 克隆新存储库时:这里


1
那种方式无法克隆/检出并创建新目录。只有@AlexRosenfeld的答案能够帮助。 - Gangnus
我已经更新了答案,以便在一个地方查看,谢谢。 - Daniel Hári

34
几年晚了,但是我想补充一点,如果您需要一次性完成这个操作(就像我做的那样),您可以在克隆命令期间设置配置设置。尝试这个:
git clone -c core.longpaths=true <your.url.here>

1
谢谢,伙计!这在从Github克隆新目录时非常有效。 - Jay Killeen
没问题,很高兴能帮到你! - xandermonkey
1
是的!这个,而且对于克隆 - 只有这个有效! - Gangnus
@AlexRosenfeld - 谢谢,Jenkins 中有类似的东西吗?我找不到。 - ArielGro
在克隆仓库后,对于 git submodule 不起作用。 我无法将此配置传递给 git submodule,例如: git submodule update -c core.longpaths=true - Ruki Wang
显示剩余3条评论

14
打开你的.gitconfig文件,添加longpaths属性。这样它将看起来像下面这样:
[core]
symlinks = false
autocrlf = true
longpaths = true

1
那种方式无法克隆/检出并创建新目录。只有@AlexRosenfeld的答案能够帮助。 - Gangnus

9
在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**

8
作为一个在Windows上经常遇到Java存储库问题的人,最好的解决方案是安装Cygwin(https://www.cygwin.com/),并在所有>devel>git下使用其git安装。
我认为这是最好的解决方案,因为Cygwin管理长路径名,所以其他提供的命令也会受益。例如:find、cp和rm。相信我,在Windows中删除过长的路径名时,真正的问题就开始了。

6

似乎默认情况下它只能到130 [也许Windows在底层使用双字节Unicode字符]。 - rogerdpack
8
更多的人应该推动微软改变这个限制(并修复它们破坏的传统应用程序接口)。没有理由我们仍然要忍受文件名被限制在<8>.<3>字符时代的遗留问题。如果不立即解决,会挖掘更大的漏洞。顺便解决斜杠方向的问题。 - cchamberlain
@cchamberlain,C:/foo/bar/baz 是完全有效的,虽然 \foo\bar\baz 也是有效的(它将引用当前工作目录所在的任何逻辑驱动器),但 /foo/bar/baz 可能会与命令行标志产生歧义。 - JAB
@JAB - 事实上,正斜杠有时确实有效,但正如你所指出的那样,它并不可靠。cmd.exe会以一种方式响应,而powershell则会以另一种方式响应。自动完成功能会中断。底层API理解它,但在某些情况下cmd.exe并非完全理解,使用反斜杠更为安全,因为字符串有时需要转义。已经有足够多的命令行反斜杠垃圾存在于常见的Windows路径中,例如包含大量空格和括号。 - cchamberlain
2
这不是一个解决方案。技术应该是人类的仆人,而不是人类为技术服务。 - Daniel Hári
1
Windows 10 允许使用超过 260 个字符的路径名(https://dev59.com/DF4c5IYBdhLWcg3wqLxe)。在之前的 Windows 版本中,需要使用 \\?\\ 前缀 - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接