我使用Git-1.9.0-preview20140217 for Windows。据我所知,这个版本应该解决文件名过长的问题。但对我来说不是。
当然我做错了什么:我做了git配置核心。Longpaths true和git add。然后git提交。一切都很顺利。但是当我现在做一个git状态时,我得到了一个文件名太长的文件列表,例如:
node_modules/grunt-contrib-imagemin/node_modules/ pngquent -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命令。
我错过了什么?
Git的文件名限制为4096个字符,除非在Windows上使用msys编译Git。它使用旧版本的Windows API,文件名的字符数限制为260个字符。
所以据我所知,这是msys的限制,而不是Git的限制。你可以在这里阅读细节:
https://github.com/msysgit/git/pull/110
您可以通过在Windows上使用另一个Git客户端或设置core来规避这个问题。在其他答案中已经解释过了。
git config --system core.longpaths true
Git是脚本和编译代码的组合。通过上述更改,一些脚本可能会失败。这就是核心的原因。默认情况下不启用长路径。
windows文档https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd#enable-long-paths-in-windows-10-version-1607-and-later有更多信息:
从Windows 10 1607版开始,MAX_PATH限制已经取消
从常见的Win32文件和目录函数中删除。然而,你
必须选择加入新的行为。
注册表项允许您启用或禁用新的长路径
的行为。要启用长路径行为,请将注册表项设置为
HKLM \ SYSTEM \ \ LongPathsEnabled CurrentControlSet \ \控制文件系统
(类型:REG_DWORD)
更好的解决方案是从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
TortoiseGit (Windows)
对于使用TortoiseGit For Windows的人,我这样做:
(1)右键单击包含项目的文件夹。选择“TortoiseGit -> Settings”。
(2)在“Git”页签,点击“Edit local . Git /config”按钮。
(3)在弹出的文本文件中,在[core]部分下添加:
Longpaths = true
保存并关闭所有内容,然后重新尝试提交。对我来说,这很有效。
我希望这能最大限度地减少任何可能的系统范围问题,因为我们不是编辑全局的.gitconfig文件,而是只编辑这个特定存储库的文件。