Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git for Windows中的文件名太长_Windows_Git - Fatal编程技术网

Git for Windows中的文件名太长

Git for Windows中的文件名太长,windows,git,Windows,Git,我正在使用适用于Windows的Git-1.9.0-preview20140217。正如我所知,这个版本应该解决文件名过长的问题。但对我来说不是 我肯定做错了什么:我做了git config core.longpaths true和git add.然后git commit。一切都很顺利。但是当我现在执行git status时,我会得到一个文件名太长的文件列表,例如: node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/nod

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

我肯定做错了什么:我做了
git config core.longpaths true
git add.
然后
git commit
。一切都很顺利。但是当我现在执行
git status
时,我会得到一个
文件名太长的文件列表,例如:

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 generator(“yo Angular”)创建一个web应用程序,并从
.gitignore
文件中删除
节点模块。然后重复前面提到的Git命令


我在这里遗漏了什么?

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

据我所知,这是msys的限制,而不是Git的限制。您可以在此处阅读详细信息:

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

git config --system core.longpaths true
Git是脚本和编译代码的组合。如果进行上述更改,某些脚本可能会失败。这就是默认情况下不启用core.longpaths的原因

位于的windows文档包含一些详细信息:

从Windows10版本1607开始,最大路径限制已被取消 从常见的Win32文件和目录函数中删除。然而,你 必须选择新的行为

注册表项允许您启用或禁用新的长路径 行为。要启用长路径行为,请将注册表项设置为 HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathEnabled (类型: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第2697期详细介绍了npm v3(2015-06-25发布)中包含的“最大平面”文件夹结构。

这可能有助于:

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

编辑:


这是一个与“权限被拒绝”问题相关的重要答案,适用于那些未被授权全局更改git设置的用户。

Create.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文件内的新行中添加节点_模块。执行此操作后,按下您的修改按钮:

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

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

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

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

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

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


Windows,我将它移到<代码> C:\/COD>或另一个驱动器的根。

< P>如果您正在使用加密分区,请考虑将文件夹移到未加密分区,例如<强> /TMP < /强>,运行<代码> Git拉< /C> >,然后移动。

步骤如下(Windows):
  • 以管理员身份运行Git Bash
  • 运行以下命令:
  • 注意:如果步骤2不起作用或出现任何错误,您也可以尝试运行以下命令:

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

    阅读更多关于git config的信息,您还可以尝试启用长文件路径

    如果运行Windows 10 Home Edition,则可以更改注册表以启用长路径

    进入
    regedit
    中的
    HKEY\u LOCAL\u MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
    ,然后将
    LongPathsEnabled
    设置为
    1

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


    转到计算机配置→ 管理模板→ 系统→ 文件系统在
    gpedit.msc
    中,打开Enable Win32 long path并将其设置为Enabled。

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

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

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

    上述命令对我有效。在windows计算机中使用“--system”时出现配置文件未锁定错误

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

    git config--system core.longpaths true

    git config --global core.longpaths true

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