Слишком длинное имя файла в Git для Windows
Я использую Git-1.9.0-preview20140217
для Windows. Как я знаю, этот выпуск должен решить проблему со слишком длинными именами файлов. Но не для меня.
Конечно, я делаю что-то не так: я сделал git config core.longpaths true
а также git 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
Для меня это довольно просто воспроизвести: просто создайте веб-приложение Yeoman с генератором Angular ("yo angular") и удалите node_modules
от .gitignore
файл. Затем повторите вышеупомянутые команды Git.
Что мне здесь не хватает?
18 ответов
Git имеет ограничение в 4096 символов для имени файла, за исключением Windows, когда Git компилируется с помощью msys. Он использует более старую версию Windows API, и для имени файла существует ограничение в 260 символов.
Насколько я понимаю, это ограничение msys, а не Git. Вы можете прочитать подробности здесь: https://github.com/msysgit/git/pull/110
Вы можете обойти это с помощью другого клиента Git в Windows или установить core.longpaths
в true
как объяснено в других ответах.
git config --system core.longpaths true
Вы должны быть в состоянии выполнить команду
git config --system core.longpaths true
или добавьте его в один из файлов конфигурации Git вручную, чтобы включить эту функцию, если вы используете поддерживаемую версию Git. Похоже, может быть 1.9.0 и после.
Это может помочь:
git config core.longpaths true
Основное объяснение: в этом ответе предлагается не применять такой параметр к глобальной системе (ко всем проектам, чтобы избежать --system
или же --global
тег) конфигурации. Эта команда только решает проблему, будучи специфичной для текущего проекта.
Шаги, чтобы следовать:
- Запустите Git Bash от имени администратора
- Команда запуска
git config --system core.longpaths true
Узнайте больше о git config
здесь
Создайте.gitconfig и добавьте
[core]
longpaths = true
Вы можете создать файл в местоположении проекта (не уверен), а также в глобальном местоположении. В моем случае это место C:\Users\{name}\
,
Чтобы быть полностью уверенным, что он вступает в силу сразу после инициализации репозитория, но до того, как удаленная история извлечена или какие-либо файлы извлечены, безопаснее использовать ее следующим образом:
git clone -c core.longpaths=true <repo-url>
-c ключ = значение
Установите переменную конфигурации во вновь созданном хранилище; это вступает в силу сразу после инициализации хранилища, но до того, как удаленная история будет извлечена или какие-либо файлы извлечены. Ключ имеет тот же формат, что и git-config 1 (например, core.eol=true). Если для одного и того же ключа задано несколько значений, каждое значение будет записано в файл конфигурации. Это делает безопасным, например, добавление дополнительных ссылок на выборку в удаленный источник.
Это сработало для меня
Запустите в терминале от имени администратора . И запустите команду ниже.
git config --system core.longpaths true
Лучшее решение - включить параметр longpath из Git.
git config --system core.longpaths true
Но обходной путь, который работает, - это удалить папку node_modules из Git:
$ git rm -r --cached node_modules
$ vi .gitignore
Добавьте node_modules в новую строку внутри файла.gitignore. После этого нажмите ваши модификации:
$ git add .gitignore
$ git commit -m "node_modules removed"
$ git push
Проведение git config --system core.longpaths true
выкинул ошибку мне:
"ошибка: не удалось заблокировать файл конфигурации C:\Program Files (x86)\Git\mingw32/etc/gitconfig: разрешение запрещено"
Исправлено с выполнением команды на глобальном уровне:
git config --global core.longpaths true
- Загрузите и установите Git bash отсюда: https://git-scm.com/download/win
- Запустите git bash gui от имени администратора и выполните следующую команду:
git config --system core.longpaths true
- Теперь клонируйте любой репозиторий.
- Если проблема не устранена, попробуйте эту команду:
git config --global core.longpaths true
- Если не поможет попробуйте перезагрузить винду.
git config --global core.longpaths true
Приведенная выше команда сработала для меня. Использование '--system' дало мне ошибку файла конфигурации, которая не заблокирована
Вы также можете попытаться включить длинные пути к файлам.
Если вы используете Windows 10 Home Edition, вы можете изменить реестр, чтобы включить длинные пути.
Идти к HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
в regedit
а затем установить LongPathsEnabled
в 1
,
Если у вас Windows 10 Pro или Enterprise, вы также можете использовать локальные групповые политики.
Перейдите в Конфигурация компьютера → Административные шаблоны → Система → Файловая система в gpedit.msc
откройте Включить длинные пути Win32 и установите для него значение Включено.
TortoiseGit (Windows)
Для всех, кто использует TortoiseGit для Windows, я сделал следующее:
(1) Щелкните правой кнопкой мыши папку, содержащую ваш проект. Выберите TortoiseGit -> Настройки.
(2) На вкладке "Git" нажмите кнопку "Изменить локальный.git / config".
(3) В появившемся текстовом файле в разделе [core] добавьте: longpaths = true.
Сохраните и закройте все, затем повторите попытку фиксации. Для меня это сработало.
Я надеюсь, что это сведет к минимуму любые возможные общесистемные проблемы, поскольку мы редактируем не глобальный файл.gitconfig, а только файл для этого конкретного репозитория.
В Windows вы можете выполнить следующие действия, которые у меня сработали.
- Откройте свой cmd или git bash от имени администратора
- Введите следующую команду из cmd или git bash, которую вы выполнили выше как администратор
git config --system core.longpaths true
Это позволит получить глобальный доступ к длинным путям.
И теперь вы можете клонировать репозиторий без проблем с длинными путями
Переместить репозиторий в корень вашего диска (временное исправление)
Вы можете попытаться временно переместить локальный репозиторий (всю папку) в корень диска или как можно ближе к корню.
Поскольку путь в корне диска меньше, это иногда устраняет проблемы.
В Windows я бы переместил это в C:\
или корень другого диска.
В машине Windows
Запустите командную строку от имени администратора, затем выполните команду ниже
git config --system core.longpaths true
У меня тоже была эта ошибка, но в моем случае причиной была устаревшая версия npm v1.4.28.
Обновление до npm v3 с последующим
rm -rf node_modules
npm -i
работал на меня. В выпуске npm 2697 содержатся сведения о "максимально плоской" структуре папок, включенной в npm v3 (выпущена в 2015-06-25).
Если вы работаете с зашифрованным разделом, рассмотрите возможность перемещения папки в незашифрованный раздел, например, в / tmp, запустив git pull
и затем возвращаясь.