git checkout-index: не удается создать файл (слишком длинное имя файла)

#git

#git

Вопрос:

Я проверяю свой репозиторий, но там есть файл со слишком длинным именем:

 ~/git$ git clone git ssh://server/git/ma.git
Initialized empty Git repository in ~/git/ma/.git/
remote: Counting objects: 1855, done.
remote: Compressing objects: 100% (1594/1594), done.
remote: Total 1855 (delta 656), reused 1078 (delta 222)
Receiving objects: 100% (1855/1855), 54.14 MiB | 701 KiB/s, done.
Resolving deltas: 100% (656/656), done.
error: git checkout-index: unable to create file four_folder/$VERYLONGNAME.pdf (File name too long)
  

$ VERYLONGNAME имеет длину около 160 символов. Моя файловая система ext4 в Ubuntu 10.10.

Кто-нибудь может мне помочь проверить длинный файл?

Комментарии:

1. Есть ли в имени файла пробелы?

Ответ №1:

Возможно, вам потребуется отключить шифрование домашнего каталога или выполнить извне, например /tmp

Я думаю, что это ограничивает размер имени файла 144 символами.

http://ubuntuforums.org/showthread.php?t=1173541

http://ubuntuforums.org/showthread.php?t=1258294

Комментарии:

1. Спасибо, я отключу шифрование домашнего каталога.

2. в моем случае помогло перемещение репозитория с зашифрованного диска, спасибо

Ответ №2:

Если вы используете функцию зашифрованного домашнего каталога Ubuntu, попробуйте выполнить возврат в каталог, не относящийся к вашему домашнему каталогу; ecryptfs может привести к удлинению имен файлов в базовой файловой системе. В противном случае вы можете получить данные с помощью следующей процедуры:

Сначала перейдите в содержащий каталог и введите git ls-files --stage . Вы должны увидеть кучу выходных данных следующего вида:

 100644 16890852350cb62bb9f9aec5e52eea8ba46f1192 0       somefile
  

Найдите хэш, соответствующий интересующему вас файлу. Теперь сделайте:

 git cat-file blob 16890852350cb62bb9f9aec5e52eea8ba46f1192 > shortername.pdf
  

Где shortername.pdf — это новое имя для рассматриваемого файла, заменяющее хэш на тот, который вы нашли выше. Это извлечет содержимое рассматриваемого файла.

Теперь просто сделайте:

 git add shortername.pdf
git rm --cached $VERYLONGNAME.pdf
git commit
  

Это эффективно переименует слишком длинный PDF-файл в более подходящее имя.