我使用Git-1.9.0-preview20140217 for Windows。据我所知,这个版本应该解决文件名过长的问题。但对我来说不是。

当然我做错了什么:我做了git配置核心。Longpaths true和git add。然后git提交。一切都很顺利。但是当我现在做一个git状态时,我得到了一个文件名太长的文件列表,例如:

node_modules/grunt-contrib-imagemin/node_modules/ pngquent -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 ")创建一个Yeoman web应用程序,并从.gitignore文件中删除node_modules。然后重复前面提到的Git命令。

我错过了什么?


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

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

您可以通过在Windows上使用另一个Git客户端或设置core来规避这个问题。在其他答案中已经解释过了。

git config --system core.longpaths true

Git是脚本和编译代码的组合。通过上述更改,一些脚本可能会失败。这就是核心的原因。默认情况下不启用长路径。

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文件和目录函数中删除。然而,你 必须选择加入新的行为。 注册表项允许您启用或禁用新的长路径 的行为。要启用长路径行为,请将注册表项设置为 HKLM \ SYSTEM \ \ LongPathsEnabled CurrentControlSet \ \控制文件系统 (类型:REG_DWORD)


您应该能够运行该命令

git config --system core.longpaths true

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


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

更新到npm v3,然后

rm -rf node_modules
npm -i

为我工作。NPM issue 2697详细介绍了NPM v3(发布2015-06-25)中包含的“最大化平面”文件夹结构。


这可能会有帮助:

git config core.longpaths true

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

编辑:

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


创建.gitconfig并添加

[core]
longpaths = true

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


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

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)。如果同一个键有多个值,则每个 值将被写入配置文件。这使它安全,为 示例,向源远程添加额外的获取refspecs。

更多信息


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

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

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

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


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


操作步骤(Windows):

以管理员身份运行Git Bash(右键单击应用快捷方式将显示以管理员身份运行的选项) 执行如下命令:

git config --system core.longpaths true

注意:如果第2步不工作或给出任何错误,你也可以尝试运行这个命令:

git config --global core.longpaths true

阅读更多关于git配置的信息。


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

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

进入regedit中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,然后将LongPathsEnabled设置为1。

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

在gpedit中进入“计算机配置→管理模板→系统→文件系统”。打开“Enable Win32长路径”,设置为“Enabled”。


执行git配置——系统核心。Longpaths true向我抛出了一个错误:

错误:无法锁定配置文件C:\Program Files (x86)\Git\mingw32/etc/gitconfig: Permission denied"

修正了在全局级别执行命令:

git config --global core.longpaths true

git config --global core.longpaths true

上面的命令对我很管用。使用“——system”给我配置文件未锁定错误


在windows机器中

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

Git配置——系统核心。longpaths真实


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

以管理员身份打开cmd或git bash

以管理员身份从cmd或git bash中输入以下命令

git config --system core.longpaths true

这将允许全局访问长路径 现在您可以克隆存储库,而不存在长路径的问题


TortoiseGit (Windows)

对于使用TortoiseGit For Windows的人,我这样做:

(1)右键单击包含项目的文件夹。选择“TortoiseGit -> Settings”。

(2)在“Git”页签,点击“Edit local . Git /config”按钮。

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

保存并关闭所有内容,然后重新尝试提交。对我来说,这很有效。

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


这对我很有效

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

git config --system core.longpaths true

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