可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I\'m using Git-1.9.0-preview20140217
for Windows. As I know, this release should fix the issue with too long filenames. But not for me.
Surely I\'m doing something wrong: I did git config core.longpaths true
and git add .
and then git commit
. Everything went well. But when I now do a git status
, I get a list of files with Filename too long
, for example:
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
It is quite simple to reproduce for me: just create a Yeoman web application with the Angular generator (\"yo angular\") and remove node_modules
from the .gitignore
file. Then repeat the aforementioned Git commands.
What am I missing here?
回答1:
Git has a limit of 4096 characters for a filename, except on Windows when Git is compiled with msys. It uses an older version of the Windows API and there\'s a limit of 260 characters for a filename.
So as far as I understand this, it\'s a limitation of msys and not of Git. You can read the details here:
https://github.com/msysgit/git/pull/110
You can circumvent this by using another Git client on Windows or set core.longpaths
to true
as explained in other answers.
git config --system core.longpaths true
Git is build as a combination of scripts and compiled code. With the above change some of the scripts might fail. That\'s the reason for core.longpaths not to be enabled by default.
The windows documentation at https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file has some more information:
Starting in Windows 10, version 1607, MAX_PATH limitations have been
removed from common Win32 file and directory functions. However, you
must opt-in to the new behavior.
A registry key allows you to enable or disable the new long path
behavior. To enable long path behavior set the registry key at
HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem LongPathsEnabled
(Type: REG_DWORD)
回答2:
You should be able to run the command
git config --system core.longpaths true
or add it to one of your Git configuration files manually to turn this functionality on, once you are on a supported version of Git. It looks like maybe 1.9.0 and after.
回答3:
This might help:
git config core.longpaths true
Basic explanation: This answer suggests not to have such setting applied to the global system (to all projects so avoiding --system
or --global
tag) configurations. This command only solves the problem by being specific to the current project.
回答4:
Create .gitconfig and add
[core]
longpaths = true
You can create the file in a project location (not sure) and also in the global location. In my case the location is C:\\Users\\{name}\\
.
回答5:
The better solution is enable the longpath parameter from Git.
git config --system core.longpaths true
But a workaround that works is remove the node_modules folder from Git:
$ git rm -r --cached node_modules
$ vi .gitignore
Add node_modules in a new row inside the .gitignore file. After doing this, push your modifications:
$ git add .gitignore
$ git commit -m \"node_modules removed\"
$ git push
回答6:
Steps to follow:
- Start Git Bash as administrator
- Run command
git config --system core.longpaths true
Read more about git config
here.
回答7:
To be entirely sure that it takes effect immediately after the repository is initialized, but before the remote history is fetched or any files checked out, it is safer to use it this way:
git clone -c core.longpaths=true <repo-url>
-c key=value
Set a configuration variable in the newly-created repository; this takes effect immediately after the repository is initialized, but
before the remote history is fetched or any files checked out. The key
is in the same format as expected by git-config1 (e.g.,
core.eol=true). If multiple values are given for the same key, each
value will be written to the config file. This makes it safe, for
example, to add additional fetch refspecs to the origin remote.
More info
回答8:
Move repository to root of your drive (temporary fix)
You can try to temporarily move the local repository (the entire folder) to the root of your drive or as close to the root as possible.
Since the path is smaller at the root of the drive, it sometimes fixes the issues.
On Windows, I\'d move this to C:\\
or another drive\'s root.
回答9:
You could also try to enable long file paths.
If you run Windows 10 Home Edition you could change your Registry to enable long paths.
Go to HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem
in regedit
and then set LongPathsEnabled
to 1
.
If you have Windows 10 Pro or Enterprise you could also use Local Group Policies.
Go to Computer Configuration → Administrative Templates → System → Filesystem in gpedit.msc
, open Enable Win32 long paths and set it to Enabled.
回答10:
I had this error too, but in my case the cause was using an outdated version of npm, v1.4.28.
Updating to npm v3 followed by
rm -rf node_modules
npm -i
worked for me. npm issue 2697 has details of the \"maximally flat\" folder structure included in npm v3 (released 2015-06-25).
回答11:
If you are working with your encrypted partition, consider moving the folder to an unencrypted partition, for example a /tmp, running git pull
, and then moving back.
回答12:
Executing git config --system core.longpaths true
thrown an error to me:
\"error: could not lock config file C:\\Program Files
(x86)\\Git\\mingw32/etc/gitconfig: Permission denied\"
Fixed with executing the command at the global level:
git config --global core.longpaths true