git pull перервано з назвою файлу помилки занадто довго


114

Я використовую Windows як свою ОС і працюю над проектом з другом, який використовує Mac. Він перевірив код у нашому Github.

Я намагався git тягнути все, що він робив, і це переривало помилки "занадто довге ім'я файлу" коду сторонньої сторони.

Що я можу зробити?


Ця проблема має два принципово різні випадки, залежно від вашої операції. Якщо сховище вже існує, ви можете змінити його конфігурацію. Але якщо ні? Для клонування / оформлення замовлення зі створенням нового каталогу допоможе лише відповідь @AlexRosenfeld.
Gangnus

Відповіді:


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 чи будь-які інструменти, якими ви користуєтеся.


Є кілька оновлень, схоже, є якийсь додатковий сценарій, який потрібно запустити після встановлення mysysgit github.com/msysgit/git/pull/122#issuecomment-43653756
Адам Грант

18
На що насправді працювало: git config --global core.longpaths true
Anton Andreev

@AntonAndreev Yup, якщо ви хочете встановити його в глобальному масштабі, це добре. Локальний обсяг на сховище також є дійсним.
млоскот

Для мене це не спрацювало, не встановивши його на глобальному рівні.
Антон Андрєєв

1
Таким чином не буде працювати для клонування / оформлення каси зі створенням нового каталогу. Тільки відповідь @AlexRosenfeld допоможе.
Гангнус

69

Solution1 - встановити глобальний конфігурацію, виконавши цю команду:

git config --system core.longpaths true

Solution2 - або ви можете безпосередньо редагувати свій конкретний файл git config, як показано нижче:

YourRepoFolder -> .git -> config:

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

Рішення3 - при клонуванні нового сховища: тут .


1
Таким чином не буде працювати для клонування / оформлення каси зі створенням нового каталогу. Тільки відповідь @AlexRosenfeld допоможе.
Gangnus

Я оновив відповідь на це, щоб мати в одному місці, дякую.
Даніель Харі

26

Кілька років пізніше, але я хотів би додати, що якщо вам потрібно зробити це одним махом (як я це зробив), ви можете встановити настройки конфігурації під час команди клонування. Спробуйте це:

git clone -c core.longpaths=true <your.url.here>

1
Будьмо, друже! Це чудово спрацювало під час клонування нового каталогу з github.
Джей Кілін

Без проблем радий, що це допомогло!
xandermonkey

1
Так! Цей, а для клонування - працює лише цей!
Gangnus

Це не працює, моє клонування все одно переривається. Я використовую git version 1.8.4.msysgit.0, будь-яку ідею?
Simple-Solution

Схоже, це застаріло . Можливо, спробуйте використовувати git-scm? Яку помилку ви отримаєте?
xandermonkey

12

Відкрийте файл.gitconfig, щоб додати властивість longpaths. Так воно буде виглядати наступним чином:

[core]
symlinks = false
autocrlf = true
longpaths = true

1
Таким чином не буде працювати для клонування / оформлення каси зі створенням нового каталогу. Тільки відповідь @AlexRosenfeld допоможе.
Gangnus

6

Оскільки хтось, хто постійно стикався з цією проблемою зі сховищами Java у Windows, найкращим рішенням є встановлення Cygwin ( https://www.cygwin.com/ ) та використання його встановлення git під всім> devel> git.

Причина, що це найкраще рішення, з яким я зіткнувся, - це тому, що Cygwin управляє іменами довгого шляху, тому інші надані команди користь Наприклад: знайти, cp і rm. Повірте, справжня проблема починається, коли вам доведеться видалити імена шляхів, які занадто довгі в Windows.


4

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


Здається, він може перейти лише до 130 [можливо, Windows використовує подвійні байтові символи unicode під ним] за замовчуванням [?]
rogerdpack

5
Більше людей повинні підштовхувати Microsoft змінити це обмеження (і виправити застарілі API, які вони порушують). Немає жодної причини, щоб ми все ще жили з цим залишком днів, коли імена файлів обмежувались <8>. <3> символами. Якщо не зафіксувати його негайно, викопується більший отвір. Виправте напрямок косої риски, поки ви знаходитесь на ній.
cchamberlain

@cchamberlain C: / foo / bar / baz є абсолютно дійсним, хоча в той час як \ foo \ bar \ baz також дійсний (він буде посилатися на будь-який логічний диск, на якому працює поточний робочий каталог) / foo / bar / baz може викликати неоднозначність з прапори командного рядка.
JAB

@JAB - Це правда, що пряма косої риси працює іноді, але, як ви вказали, це не є надійним. cmd.exe буде реагувати в один бік і підсилювати інший. Автозаповнення перерв. Основний API розуміє це, але cmd.exe - це не у всіх випадках, а більш безпечне використання зворотної косої риси призводить до того, що рядки іноді потребують втечі. Уже є достатня кількість сміття в зворотній косі командного рядка з кількістю пробілів і круглих дужок, які існують у загальних шляхах Windows.
Чемберлен

2
Це не рішення. Технологія повинна бути слугою людини, а не людина повинна бути слугою технології.
Даніель Харі

4

У Windows запустіть "cmd" як адміністратор та виконайте команду.

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

або вам потрібно chmod для папки, де б не встановлено git.

або manullay оновіть свій файл вручну, перейшовши по шляху "Git \ mingw64 \ тощо"

[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**
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.