Как разрешить "Ошибка: неверный индекс - Fatal: индексный файл поврежден" при использовании Git
После git init
я добавил и совершил несколько файлов, внес некоторые изменения, добавил и зафиксировал. Настройте демон git (работает под Cygwin на WinXP) и один раз клонирует репозиторий.
Теперь я получаю эту ошибку с клонированным репозиторием:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
Есть ли способ исправить это, кроме получения новой копии репозитория?
Ответы
Ответ 1
Если проблема связана с индексом как промежуточной областью для фиксации (т.е. .git/index
), вы можете просто удалить индекс (сделайте резервную копию, если хотите), а затем восстановите индекс к версии в последнем фиксации:
В OSX/Linux:
rm -f .git/index
git reset
В Windows:
del .git\index
git reset
(Команда reset
выше такая же, как git reset --mixed HEAD
)
В качестве альтернативы вы можете использовать более низкий уровень сантехника git read-tree
вместо git reset
.
Если проблема связана с индексом packfile, вы можете восстановить его с помощью git index-pack
.
Ответ 2
Возможно, вы случайно повредили файл .git/index с помощью sed в корне вашего проекта (возможно, рефакторинг?) с чем-то вроде:
sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT")
чтобы избежать этого в будущем, просто игнорируйте двоичные файлы с помощью grep/sed:
sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT")
Ответ 3
Это звучит как плохой клон. Вы можете попробовать следующее, чтобы получить (возможно?) Дополнительную информацию:
git fsck --full
Ответ 4
В моем случае это была вложенная папка .git в web/ckeditor/kcfinder
git status
error: bad index file sha1 signature
fatal: index file corrupt
fatal: 'git status --porcelain' failed in submodule web/ckeditor/kcfinder
Ответ 5
У меня была эта проблема, и я пытаюсь установить ti с этим:
rm -f .git/index
git reset
НО это не сработало. Решение?
По какой-то причине у меня были другие .git папки в подкаталогах. Я удаляю те .git папки (а не основной) и git reset
снова. Как только они были удалены, все снова работало.
Ответ 6
Эта проблема может возникнуть, если под одним из подкаталогов есть каталог .git
. Чтобы исправить это, проверьте, есть ли там другие директории .git, и удалите их и повторите попытку.
Ответ 7
Так как приведенные выше решения оставили мне проблемы с продолжением, я использовал это скучное решение:
- клонировать новую копию репо в другом месте
- скопируйте новый каталог .git в (сломанное) репо, в котором были изменения, которые я хотел зафиксировать.
Сделал трюк. Btw, я сделал sed
в корне проекта, как предположил @hobs. Выучил мой урок.
Ответ 8
Это сработало для меня. Хотя мне любопытно, почему я начал получать ошибки в первую очередь. Когда я вышел вчера, все было хорошо. Войдите сегодня утром, это не так.
rm .git/index
git reset
Ответ 9
Это смешно, но я просто перезагрузил свою машину (mac), и проблема исчезла, как никогда не было. Мне не нравится звучать как парень поддержки...
Ответ 10
rm -f .git/index
git reset
Дополнительная информация на https://www.chris-shaw.com/blog/quick-fix-for-git-corrupt-index
Ответ 11
Вы также можете попробовать восстановить предыдущую версию файла (если вы используете windows os)