индексный файл меньше ожидаемого

81

Сегодня утром я начал получать эту ошибку от git:

фатальный: индексный файл меньше ожидаемого

фатальный: git status --porcelain failed

Есть идеи, что происходит и как это решить?

Карельм
источник
Вы пробовали это vertis.github.com/2012/01/24/…
Gal
Да, я пробовал перед публикацией. Проблема заключалась в моих подмодулях, которые продолжали портить мой индексный файл (не знаю почему).
karellm
@karellm Вы узнали, почему это происходит?
crmpicco
Нет, если честно, я не исследовал причину этого, и это тоже перестало происходить.
karellm
Совет: по моему опыту, это может быть связано с тем, что папка NFS не обновляется. Если ваше репо находится в NFS, просто подождите несколько минут, прежде чем пытаться исправить проблему. У меня это было после загрузки с одной машины, а затем проверки статуса на другой, обе машины устанавливали один и тот же NFS.
ggll

Ответы:

107

Индексный файл поврежден, но его легко восстановить. Просто удали ...

rm .git/index

Затем вы можете повторно добавить файлы, которые пытаетесь обработать.

Meagar
источник
Как было сказано выше, он не работал из-за конфликта с подмодулем, который снова и снова разрушал мой индекс ... Я удалил подмодуль, удалил индекс и добавил все. Наконец-то это сработало. Благодаря!
karellm 09
3
Почему это происходит? У меня такое случалось дважды за последние две недели, и я не вижу для этого причины.
crmpicco
7
У меня это не сработало. До этой ошибки у меня была в основном чистая рабочая копия. После удаления индексного файла и запуска git add .он вел себя так, как если бы каждый файл был новым и требовал фиксации.
Марк
1
Не работает и при наличии подмодуля. Просто сбросьте (ответ ниже).
TimZaman
Если обнаружил, что после запуска этого мне пришлось сделать, git restore --stagedи это
устранило
90

Если вы хотите сохранить локальные изменения, используйте следующее:

$ rm .git/index
$ git reset HEAD .

> Unstaged changes after reset:
  modified foo.txt
  modified bar.txt
Скотт Паради
источник
1
Есть идеи, почему это происходит? Это случилось со мной примерно 4-5 раз за последние две недели.
crmpicco
1
Этот ответ здесь лучший. Кроме того, обратите внимание, если вы используете подмодули git: удалите также эти индексные файлы (они находятся в .git/modules/src). Это заставило меня задуматься, почему ошибка все еще возникает после удаления (основного) индексного файла.
Graftak
Я предполагаю, что это могло произойти по стандартным причинам, процесс остановился на полпути, закончилось место на диске и т. Д. Хотя в моем случае я мог бы использовать символическую ссылку на папку git для создания каталогов, которые будут использоваться для сборки вместо svn externals , хотя это странно, поскольку единственная операция с этими репозиториями - это только чтение, чтобы выполнить полный сброс папок сборки.
jgmjgm
2

Тем, у кого есть ошибки даже после удаления индекса и которые не могут выполнить сброс. Если вы хотите сохранить свои изменения, сделайте следующее (не решение, а уродливый обходной путь!).

  1. Сделайте резервную копию ваших файлов, то, что я собираюсь сказать, должно сработать, но сделайте это на всякий случай.
  2. Удалите папку .git
  3. Клонировать свой репозиторий (неважно где) Я сделал это в текущем каталоге
  4. Скопируйте созданный из каталога clone .git в текущий каталог
  5. Удалите клонированный каталог 6. Необязательно, если вы снова использовали для него извлечение ветки.
  6. Статус Git теперь должен отслеживать изменения, как и положено, и все ваши команды git должны работать

Мой случай был таким, как описано выше, git испортил свои ссылки ... Git logпоказывал "ваша ветка кажется сломанной" и git fsckпредупреждал меня о плохих ссылках. Подумал, смогу ли я это исправить, но я бы потратил на это много времени, поэтому я выбрал уродливый обходной путь.

Мишо Янев
источник