Слишком длинное имя файла в 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 тег) конфигурации. Эта команда только решает проблему, будучи специфичной для текущего проекта.

Шаги, чтобы следовать:

  1. Запустите Git Bash от имени администратора
  2. Команда запуска 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 вы можете выполнить следующие действия, которые у меня сработали.

  1. Откройте свой cmd или git bash от имени администратора
  1. Введите следующую команду из cmd или git bash, которую вы выполнили выше как администратор
git config --system core.longpaths true
  1. Это позволит получить глобальный доступ к длинным путям.

  2. И теперь вы можете клонировать репозиторий без проблем с длинными путями

Переместить репозиторий в корень вашего диска (временное исправление)

Вы можете попытаться временно переместить локальный репозиторий (всю папку) в корень диска или как можно ближе к корню.

Поскольку путь в корне диска меньше, это иногда устраняет проблемы.

В 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и затем возвращаясь.

Другие вопросы по тегам