git pull прерван, имя файла слишком длинное

114

Я использую Windows в качестве ОС и работаю над проектом с другом, который использует Mac. Он зарегистрировал код на нашем Github.

Я пытался git вытащить все, что он делал, и он прервался с ошибками "слишком длинное имя файла" стороннего кода.

Что я могу сделать?

Дэйв Мартин
источник
У этой проблемы есть два принципиально разных случая, в зависимости от вашей операции. Если репозиторий уже существует, вы можете изменить его конфигурацию. А если нет? Для клонирования / оформления заказа с созданием нового каталога поможет только ответ @AlexRosenfeld.
Гангнус

Ответы:

200

Часто задаваемые вопросы по msysgit на Git не могут создать файловый каталог с длинным путем , кажется, неактуальным, так как он все еще ссылается на старый билет msysgit № 110 . Однако, согласно более позднему билету № 122, проблема была исправлена ​​в msysgit 1.9, таким образом:

  1. Обновите до msysgit 1.9 (или новее)
  2. Запустить Git Bash
  3. Перейдите в свой репозиторий Git, который "страдает" проблемой длинных путей
  4. Включите поддержку длинных путей с помощью git config core.longpaths true

Пока что у меня это работает очень хорошо.

Обратите внимание на важную заметку в комментарии к билету №122.

не возвращайтесь сюда и не жалуйтесь, что он ломает Windows Explorer, cmd.exe, bash или любые другие инструменты, которые вы используете.

mloskot
источник
Есть несколько обновлений, похоже, есть дополнительный скрипт, который вам нужно запустить после установки mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Адам Грант
18
На самом деле сработало: git config --global core.longpaths true
Антон Андреев
@AntonAndreev Ага, если вы хотите установить его в глобальном масштабе, это нормально. Локальная область видимости для репозитория также вполне допустима.
mloskot 01
У меня не получилось без настройки на глобальном уровне.
Антон Андреев
1
Такой способ не сработает для клонирования / оформления заказа с созданием нового каталога. Только ответ @AlexRosenfeld поможет.
Гангнус
69

Решение1 - установите глобальную конфигурацию, выполнив эту команду:

git config --system core.longpaths true

Решение2 - или вы можете напрямую отредактировать свой конкретный файл конфигурации git, как показано ниже:

YourRepoFolder -> .git -> config:

[core]
    repositoryformatversion = 0
    filemode = false
    ...
    longpaths = true        <-- (add this line under core section)

Решение3 - при клонировании нового репозитория: здесь .

Даниэль Хари
источник
1
Такой способ не сработает для клонирования / оформления заказа с созданием нового каталога. Только ответ @AlexRosenfeld поможет.
Гангнус
Я обновил ответ этим, чтобы иметь в одном месте, спасибо.
Daniel Hári
26

Несколько лет спустя, но я хотел бы добавить, что если вам нужно сделать это одним махом (как я), вы можете установить параметры конфигурации во время команды clone. Попробуй это:

git clone -c core.longpaths=true <your.url.here>
xandermonkey
источник
1
Ура, дружище! Это отлично сработало при клонировании нового каталога из github.
Джей Киллин,
Без проблем рад, что помог!
xandermonkey
1
Да! Этот, а для клонирования - работает только этот!
Гангнус
Это не работает, мое клонирование по-прежнему прерывается. Я использую git version 1.8.4.msysgit.0, есть идеи?
Simple-Solution
Похоже, это устарело . Может быть, попробовать использовать git-scm? Какая у вас ошибка?
xandermonkey
12

Откройте файл your.gitconfig, чтобы добавить свойство longpaths. Это будет выглядеть так:

[core]
symlinks = false
autocrlf = true
longpaths = true
Пит
источник
1
Такой способ не сработает для клонирования / оформления заказа с созданием нового каталога. Только ответ @AlexRosenfeld поможет.
Гангнус
6

Как человек, который постоянно сталкивался с этой проблемой с java-репозиториями в Windows, лучшим решением является установка Cygwin ( https://www.cygwin.com/ ) и использование его установки git для всех> devel> git.

Причина, по которой это лучшее решение, с которым я столкнулся, заключается в том, что Cygwin управляет длинными именами путей, поэтому другие предоставленные команды выигрывают. Пример: find, cp и rm. Поверьте мне, настоящая проблема начинается, когда вам нужно удалить слишком длинные имена путей в Windows.

Тристан
источник
4

Старайтесь, чтобы ваши файлы были ближе к корню файловой системы. Дополнительные сведения: по техническим причинам Git для Windows не может создавать файлы или каталоги, если абсолютный путь превышает 260 символов .

Майкл Вер
источник
Похоже, что он может перейти только на 130 [возможно, в Windows используются двухбайтовые символы
Юникода
5
Больше людей должно подталкивать Microsoft к изменению этого ограничения (и исправлению устаревших API, которые они ломают). Нет причин, по которым мы все еще должны жить с этим пережитком дней, когда имена файлов были ограничены символами <8>. <3>. Если не исправить это сразу, вырывается яма побольше. Исправьте направление косой черты, пока находитесь на нем.
cchamberlain 08
@cchamberlain C: / foo / bar / baz вполне допустим, хотя \ foo \ bar \ baz также допустим (он будет относиться к любому логическому диску, на котором находится текущий рабочий каталог) / foo / bar / baz может вызвать двусмысленность с флаги командной строки.
JAB
@JAB - Верно, что косая черта иногда работает, но, как вы отметили, это ненадежно. cmd.exe будет реагировать одним способом, а PowerShell - другим. Автозаполнение перерывов. Базовый API понимает это, но cmd.exe не во всех случаях, а более безопасное использование обратной косой черты заставляет строки иногда нуждаться в экранировании. Уже существует достаточно мусора командной строки с обратной косой чертой с количеством пробелов и скобок, которые существуют в общих путях Windows.
cchamberlain
2
Это не решение. Технология должна быть слугой человека, а не человек должен быть слугой технологии.
Даниэль Хари,
4

В Windows запустите «cmd» от имени администратора и выполните команду.

"C:\Program Files\Git\mingw64\etc>"
"git config --system core.longpaths true"

или вам нужно выполнить chmod для папки, в которой установлен git.

или обновите файл вручную вручную, перейдя по пути "Git \ mingw64 \ etc"

[http]
    sslBackend = schannel
[diff "astextplain"]
    textconv = astextplain
[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
[credential]
    helper = manager
**[core]
    longpaths = true**
Кумар Абхишек
источник