Git for Windows中的文件名太长了

时间:2014-03-22 09:14:24

标签: windows git

我在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生成器创建一个Yeoman Web应用程序(" yo angular")并从{{1}中删除node_modules文件。然后重复上述Git命令。

我在这里缺少什么?

15 个答案:

答案 0 :(得分:967)

您应该可以运行命令

git config --system core.longpaths true

或手动将其添加到您的一个Git配置文件中,以便在支持的Git版本上启用此功能。看起来可能是1.9.0及之后。

答案 1 :(得分:385)

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的原因。

https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file上的Windows文档提供了更多信息:

  

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

     

注册表项允许您启用或禁用新的长路径   行为。要启用长路径行为,请将注册表项设置为   HKLM \ SYSTEM \ CurrentControlSet \ Control \ FileSystem LongPathsEnabled   (类型:REG_DWORD)

答案 2 :(得分:169)

这可能会有所帮助:

git config core.longpaths true

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

答案 3 :(得分:58)

创建.gitconfig并添加

[core]
longpaths = true

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

答案 4 :(得分:33)

更好的解决方案是从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

答案 5 :(得分:25)

要完全确定它在初始化存储库后立即生效,但在获取远程历史记录或检出任何文件之前,以这种方式使用它会更安全:

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

-c key = value

     

在新创建的存储库中设置配置变量;这在初始化存储库后立即生效,但是   在获取远程历史记录或检出任何文件之前。钥匙   格式与git-config 1的格式相同(例如,   core.eol =真)。如果为同一个键给出了多个值,则每个值   value将写入配置文件。这使得它安全   例如,将其他fetch refspec添加到原始远程。

More info

答案 6 :(得分:7)

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

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

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

如果您使用Windows 10 Pro或Enterprise,则还可以使用本地组策略。

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

答案 7 :(得分:6)

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

  

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

在全局级别执行命令已解决:

git config --global core.longpaths true

答案 8 :(得分:4)

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

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

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

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

答案 9 :(得分:2)

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

更新到npm v3后跟

rm -rf node_modules
npm -i

为我工作。 npm issue 2697详细介绍了&#34;最平坦的&#34;文件夹结构包含在npm v3中(2015-06-25发布)。

答案 10 :(得分:2)

git config --global core.longpaths true

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

答案 11 :(得分:2)

在Windows机器中

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

git config --system core.longpaths true

答案 12 :(得分:1)

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

答案 13 :(得分:0)

在Windows中,您可以按照以下对我有用的步骤进行操作。

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

  2. 现在您可以克隆存储库,并且路径较长没有问题

答案 14 :(得分:0)

TortoiseGit (Windows)

对于使用Windows版TortoiseGit的任何人,我都是这样做的:

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

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

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

保存并关闭所有内容,然后重试您的提交。对我来说,这行得通。enter image description here

由于我们不是在编辑全局.gitconfig文件,而只是在编辑此特定存储库中的文件,所以我希望这样做可以将所有可能的系统范围的问题减至最少。