Как разрешить "Ошибка: неверный индекс - 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), и проблема исчезла, как никогда не было. Мне не нравится звучать как парень поддержки...

Ответ 11

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