Git for Windows中的文件名太长

我正在为Windows使用Git-1.9.0-preview20140217。据我所知,此版本应该解决文件名过长的问题。但不适合我。

我肯定做错了什么:我做了git config core.longpaths truegit add .,然后git commit。一切都很顺利。但是当我现在做git status时,我得到一个包含Filename too long的文件列表,例如:

node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js: Filename too long

对我来说,重现很简单:只需使用Angular生成器(“yo Angular”)创建一个文书 Web应用程序,并从.gitignore文件中删除node_modules。然后重复上述Git命令。

我错过了什么?

933685 次浏览

Git的文件名限制为4096个字符,除非在Windows上使用msys编译Git。它使用旧版本的Windows API,文件名限制为260个字符。

据我所知,这是msys的限制,而不是Git的限制。你可以在这里阅读详细信息:https://github.com/msysgit/git/pull/110

您可以通过在Windows上使用另一个Git客户端或将core.longpaths设置为true来规避此问题,如其他答案中所述。

git config --system core.longpaths true

Git是作为脚本和编译代码的组合构建的。通过上述更改,某些脚本可能会失败。这就是默认不启用core.longpaths的原因。

Windows留档https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later有更多信息:

从Windows 10版本1607开始,MAX_PATH限制从常见的Win32文件和目录函数中删除。但是,您必须选择加入新行为。

注册表项允许您启用或禁用新的长路径行为。要启用长路径行为,请将注册表项设置为H KLM\SYSTEM\当前控制集\Control\FileSystem\长路径启用(类型:REG_DWORD)

您应该能够运行命令

git config --system core.longpaths true

或者手动将其添加到您的一个Git配置文件中以打开此功能,一旦您使用的是受支持的Git版本。它看起来可能是1.9.0及之后。

我也有这个错误,但在我的情况下,原因是使用了npm v1.4.28版本过低。

更新到npm v3,然后是

rm -rf node_modulesnpm -i

为我工作。npm问题2697包含npm v3(发布于2015-06-25)中包含的“最大扁平化”文件夹结构的详细信息。

这可能有助于:

git config core.longpaths true

基本解释:此答案建议不要将此类设置应用于全局系统(对所有项目,以避免--system--global标签)配置。此命令仅通过特定于当前项目来解决问题。

编辑:

对于那些没有授予全局更改git设置的人来说,这是一个与“权限被拒绝”问题相关的重要答案。

创建. gitconfig并添加

[core]longpaths = true

您可以在项目位置(不确定)和全局位置创建文件。在我的情况下,位置是C:\Users\{name}\

更好的解决方案是从Git中启用long path参数。

git config --system core.longpaths true

但是一个有效的解决方法是从Git中删除node_modules文件夹:

$ git rm -r --cached node_modules$ vi .gitignore

在. gitignore文件中的新行中添加node_modules。执行此操作后,推送您的修改:

$ git add .gitignore$ git commit -m "node_modules removed"$ git push

为了完全确保它在存储库初始化后立即生效,但在获取远程历史记录或签出任何文件之前,这样使用它更安全:

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

-c键=值

在新创建的存储库中设置配置变量;这在存储库初始化后立即生效,但是在获取远程历史记录或签出任何文件之前。密钥与git-config1预期的格式相同(例如,core.eol=true)。如果为同一个键给出多个值,则每个值值将写入配置文件。这使得它安全,对于例如,向原始远程添加额外的获取引用规格。

更多信息

将存储库移动到驱动器的根(临时修复)

您可以尝试将本地存储库(整个文件夹)临时移动到驱动器的根目录或尽可能靠近根目录。

由于驱动器根部的路径较小,因此有时会修复问题。

在Windows上,我会将其移动到C:\或其他驱动器的根目录。

如果您正在使用加密分区,请考虑将文件夹移动到未加密的分区,例如/tmp,运行git pull,然后返回。

要遵循的步骤(Windows):

  1. gitbash作为管理员运行(右键单击应用程序快捷方式将显示Run as Administrator选项)
  2. 运行以下命令:
git config --system core.longpaths true

说明:如果步骤2不起作用或给出任何错误,您也可以尝试运行此命令:

git config --global core.longpaths true

阅读更多关于git config这里

您还可以尝试启用长文件路径。

如果您运行Windows 10家庭版,您可以更改注册表以启用长路径。

转到regedit中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,然后将LongPathsEnabled设置为1

如果你有Windows 10 Pro或Enterprise,你也可以使用本地组策略。

转到gpedit.msc中的计算机配置管理模板系统文件系统,打开启用Win32长路径并将其设置为已启用

执行git config --system core.longpaths true向我抛出一个错误:

"错误:无法锁定配置文件C:\Program Files(x86)\Git\ming w32/etc/gitconfig:权限拒绝"

修复了在全局级别执行命令的问题:

git config --global core.longpaths true
git config --global core.longpaths true

上面的命令对我有用。使用--system给了我配置文件未锁定错误

在Windows机器

以管理员身份运行命令提示符,然后运行以下命令

git config--systemcore.longpathstrue

在Windows中,您可以遵循这些对我有用的步骤。

  1. 以管理员身份打开您的cmd或git bash
  1. 从您以管理员身份运行的cmd或git bash中给出以下命令
git config --system core.longpaths true
  1. 这将允许全局访问长路径

  2. 现在您可以克隆存储库,而不会出现长路径问题

TortoiseGit(Windows)

对于任何使用TortoiseGit for Windows的人,我这样做了:

(1)右键单击包含您的项目的文件夹。选择TortoiseGit->设置。

(2)在“Git”选项卡上,单击“编辑本地. git/config”按钮。

(3)在弹出的文本文件中,在[core]部分下,添加:长路径=true

保存并关闭所有内容,然后重新尝试提交。对我来说,这奏效了。输入图片描述

我希望这能最大限度地减少任何可能的系统范围的问题,因为我们不编辑全局. gitconfig文件,而只是编辑这个特定存储库的文件。

这招对我管用

终端图像

作为终端运行管理员。并运行下面的命令。

git config --system core.longpaths true
  • 从这里下载并安装Git bash:https://git-scm.com/download/win
  • 以管理员身份运行git bash gui并运行以下命令:git config --system core.longpaths true
  • 现在克隆任何存储库。
  • 如果问题没有解决,请尝试此命令:git config --global core.longpaths true
  • 如果没有帮助,请尝试重新启动窗口。