Как решить "Ошибка: неверный индекс - Фатальный: файл индекса поврежден" при использовании Git - PullRequest
539 голосов
/ 12 июля 2009

После git init я добавил и зафиксировал несколько файлов, внес некоторые изменения, добавил и зафиксировал. Установите демон git (работающий под Cygwin на WinXP) и клонируйте репозиторий один раз. Теперь я получаю эту ошибку с клонированным хранилищем:

$ git status
error: bad index file sha1 signature
fatal: index file corrupt

Есть ли способ исправить это, кроме получения новой копии хранилища?

Ответы [ 12 ]

1111 голосов
/ 12 июля 2009

Если проблема с индексом как промежуточной областью для коммитов (т.е. .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.

75 голосов
/ 19 марта 2011

Возможно, вы случайно повредили файл .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")
13 голосов
/ 12 июля 2009

Звучит как плохой клон. Вы можете попробовать следующее, чтобы получить (возможно?) Больше информации:

git fsck --full
11 голосов
/ 24 июля 2015

У меня была эта проблема, и я пытаюсь исправить это:

rm -f .git/index
git reset

НО это не сработало. Решение ?По какой-то причине у меня были другие папки .git в подкаталогах.Я удаляю эти папки .git (не основной) и git reset снова.Как только они были удалены, все снова заработало.

6 голосов
/ 11 февраля 2017

Поскольку вышеприведенные решения оставили у меня постоянные проблемы, я использовал это скучное решение:

  1. клонировать новую копию репозитория в другом месте
  2. скопировать новый каталог .git в (поврежденный) репозиторий, содержащий изменения, которые я хотел зафиксировать

Сделал трюк. Кстати, я сделал sed в корне проекта, как и предполагал @hobs. Выучил мой урок.

6 голосов
/ 05 августа 2016

Это сработало для меня. Хотя мне любопытно, почему я начал получать ошибки в первую очередь. Когда я вышел из системы вчера, это было нормально. Войдите сегодня утром, это не было.

rm .git/index

git reset
4 голосов
/ 12 февраля 2018

Примечание для пользователей подмодулей git - решения здесь не будут работать для вас как есть.

Допустим, у вас есть родительский репозиторий, например, dev, а ваш субмодульный репозиторий называется api.

.

, если вы находитесь внутри api и получаете ошибку, указанную в этом вопросе:

error: bad index file sha1 signature fatal: index file corrupt

Файл index НЕ будет находиться внутри папки .git. Фактически, .git даже не будет папкой - это будет текстовый документ с расположением реальных данных .git для этого хранилища. Скорее всего как то так:

~/dev/api $ cat .git gitdir: ../.git/modules/api

Итак, вместо rm -f .git/index вам нужно будет сделать это:

rm -f ../.git/modules/api/index git reset

или, в более общем смысле,

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset

3 голосов
/ 31 мая 2016

Эта проблема может возникнуть, если под одним из подкаталогов находится каталог .git. Чтобы это исправить, проверьте, есть ли там другие каталоги .git, удалите их и попробуйте снова.

0 голосов
/ 29 мая 2019

Я столкнулся с той же проблемой. Переименуйте файл индекса в .git / index, а затем выполните git reset.

0 голосов
/ 18 ноября 2017
rm -f .git/index
git reset

Больше информации на https://www.chris -shaw.com / blog / quick-fix-for-git-коррупционный-индекс

...