协慌网

登录 贡献 社区

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 生成器(“yo angular”)创建 Yeoman node_modules.gitignore文件中删除 node_modules。然后重复上述 Git 命令。

我在这里想念什么?

答案

您应该能够运行命令

git config --system core.longpaths true

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

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/zh-cn/windows/desktop/fileio/naming-a-file上的 Windows 文档提供了更多信息:

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

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

这可能会有所帮助:

git config core.longpaths true

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

编辑:

对于那些未获准全局更改 git 设置的人来说,这是与 “permission 否认” 问题相关的重要答案。