我正在使用Git-1.9.0-preview20140217
Windows。据我所知,此版本应解决文件名过长的问题。但是不适合我。
当然,我做错了什么:我没有git config core.longpaths true
和git add .
再git commit
。一切顺利。但是当我现在执行a时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应用程序并将其node_modules
从.gitignore
文件中删除即可。然后重复上述Git命令。
我在这里想念什么?
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)
路径中最多260个字符的限制不是MSYS特有的,它是Windows API的通用模仿。可以使用Unicode路径解决此问题,但这还有其他缺点,这就是
core.longpaths
默认情况下未启用的原因。还要注意,Git for Windows并未针对MSYS进行编译。取而代之的是,它是本机Windows应用程序,带有精简的MSYS环境。@sschuberth:除了与不支持长路径的程序缺乏兼容性之外,还有其他缺点吗?
@JAB的另一个缺点是长路径始终必须是绝对路径;不支持相对路径。有关更多详细信息,请参见此处。
或作为一种快速解决方案,只需尝试在Windows上将回购签到C:/即可,从而减少了文件夹路径字符的数量。
仅供参考,到现在,问题仍然存在。我们可能要考虑在真实的操作系统上继续开发...