【问题标题】:Filename too long in Git for WindowsWindows 版 Git 中的文件名太长
【发布时间】:2014-04-29 19:38:04
【问题描述】:

我在 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”)创建一个 Yeoman Web 应用程序,然后从 .gitignore 文件中删除 node_modules。然后重复上述 Git 命令。

我在这里错过了什么?

【问题讨论】:

  • 你从哪里读到那个版本应该修复长文件名?
  • 这是补丁的拉取请求:github.com/msysgit/git/pull/122
  • @PapaMufflon 您可以将接受的答案更改为分数更高的答案吗?它对我帮助很大。
  • @v.karbovnichy 请仔细阅读我的问题。我已经在投票最多的答案中运行了该命令。但是在我问这个问题的时候,接受的答案是正确的:msys 仍然有这个字符限制。现在这个限制已经消失了, git config core.longpaths true 可以正常工作。
  • 好的,那我同意

标签: windows git


【解决方案1】:

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/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later 的 windows 文档有更多信息:

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

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

【讨论】:

  • 路径中 260 个字符的限制并非特定于 MSYS,它是一般的 Windows API 模仿。这可以通过使用 Unicode 路径来解决,但这还有其他缺点,这就是默认情况下不启用 core.longpaths 的原因。另请注意,Git for Windows 不是针对 MSYS 编译的。相反,它是一个带有精简 MSYS 环境的原生 Windows 应用程序。
  • @sschuberth:除了与不支持长路径的程序缺乏兼容性之外,还有什么缺点吗?
  • @JAB 另一个缺点是长路径总是必须是绝对的;不支持相对路径。详情请见here
  • 或者作为一个快速修复,只需尝试在 Windows 上将您的 repo 签出到 C:/ 从而减少文件夹路径字符的数量。
  • 从 Windows 10 开始,您可以编辑注册表(或应用组策略)以删除 Windows API 文件名长度限制。 howtogeek.com/266621/…
【解决方案2】:

你应该可以运行命令

git config --system core.longpaths true

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

【讨论】:

  • 这个配置选项为我解决了这个问题,即使在接受的答案中提到的 msys 也是如此。 (具体来说,版本 1.9.4.msysgit.2)。
  • Sourcetree 的行为有点奇怪,除非您“同时确保 SourceTree 使用的是系统的 Git 而不是嵌入式 Git”。 - 感谢Matej Drolc 的建议
  • Here 是一些背景信息为什么默认不启用,以及一些技术细节。
  • 在运行上述命令后得到“无法锁定配置文件 C:\Program Files\Git\mingw64/etc/gitconfig”。但是@Yash 回答对我有用
  • @divideByZero 以管理员身份运行 git bash 可防止该错误。
【解决方案3】:

这可能会有所帮助:

git config core.longpaths true

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

编辑:

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

【讨论】:

  • 这里的人们已经注意到,此设置可能会引入一些不可预测的行为,因此似乎最好将上述命令用作需要它的项目的本地设置,而不是附加将适用的 --system它适用于所有项目
  • 嘿,这只是另一个高度赞成的答案的复制。至少可以解释为什么您更喜欢删除 --system 选项..
  • 我没有提升的权限,因此在 git 存储库中执行此操作比要求 IT 团队以提升的权限运行全局命令要容易得多。谢谢萨吉鲁丁!
【解决方案4】:

要遵循的步骤(Windows):

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

注意:如果第 2 步不起作用或出现任何错误,您也可以尝试运行以下命令:

git config --global core.longpaths true

阅读更多关于git confighere的信息。

【讨论】:

  • git config --global core.longpaths true 拯救了我的一天。谢谢
【解决方案5】:

创建 .gitconfig 并添加

[core]
longpaths = true

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

【讨论】:

  • 您也可以使用以下命令执行此操作:git config --global core.longpaths true
  • git config --global core.longpaths true 为我工作,谢谢
  • 使用 Visual Studio 上面的 git bash 解决方案对我不起作用,但是找到项目的 .git/config 文件并如上所示进行编辑。谢谢你。
  • 这对我有用,我找到了那个文件并手动修改了它
  • 上述和经过验证的答案是正确的,但是由于授予文件的权限,可能无法使用这些命令更新文件。这种方法非常简单,因为这是手动方法,对我来说效果很好。您可以在以下路径C:\Users\{username} 中轻松找到.gitconfig 文件并简单地对其进行编辑。
【解决方案6】:

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

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

-c 键=值

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

More info

【讨论】:

    【解决方案7】:

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

    【讨论】:

    • 有一个很好的理由将 node_modules 文件夹签入 git:如果您希望您的软件在一年的模块可能从 npm 中消失后表现相同。
    • @cfstras 如果某个库存在漏洞并且您不定期更新,那么您肯定会遇到安全问题。
    • 当然你必须升级你的依赖。但只有当想要,如果有什么东西坏了,你会希望你的备份在 git...
    • 是真的。我会编辑我的答案。谢谢你的评论。
    • 无需提交node_modulespackages.lock文件在这里确保npm install安装的版本始终相同,直到您提交npm update
    【解决方案8】:

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

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

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

    git config --global core.longpaths true
    

    【讨论】:

    • 全局设置只影响当前用户,而系统设置影响机器上的所有用户。如果这是您的工作站,它们实际上与您可能只使用一个用户相同。
    • 如果你是命令行应用程序以管理员身份运行,第一个命令可以工作!
    【解决方案9】:

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

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

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

    如果您有 Windows 10 专业版或企业版,您还可以使用本地组策略。

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

    【讨论】:

    • 我认为这必须与 git config 结合使用,值得注意的是它不适用于 Windows Explorer,原因提到了here
    【解决方案10】:
    git config --global core.longpaths true
    

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

    【讨论】:

    • 对于 Github Desktop 用户,这是唯一有效的方法,因为 Github Desktop 使用自己的 Git 配置。
    【解决方案11】:

    TortoiseGit (Windows)

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

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

    (2) 在“Git”选项卡上,点击“Edit local .git/config”按钮。

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

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

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

    【讨论】:

      【解决方案12】:

      这对我有用

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

      git config --system core.longpaths true
      

      【讨论】:

        【解决方案13】:

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

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

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

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

        【讨论】:

        • 这是解决我问题的唯一方法。那是我路径中的文件夹太多了。
        【解决方案14】:

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

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

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

        【讨论】:

          【解决方案15】:

          我也遇到了这个错误,但就我而言,原因是使用了过时的 npm v1.4.28 版本。

          更新到 npm v3,然后

          rm -rf node_modules
          npm -i
          

          为我工作。 npm 问题 2697 包含 npm v3(2015 年 6 月 25 日发布)中包含的“最大平面”文件夹结构的详细信息。

          【讨论】:

            【解决方案16】:

            在 Windows 机器中

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

            git config --system core.longpaths true

            【讨论】:

              【解决方案17】:

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

              【讨论】:

                猜你喜欢
                • 2019-05-06
                • 2022-12-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-12-26
                • 2018-04-28
                • 1970-01-01
                相关资源
                最近更新 更多