archivo de índice más pequeño de lo esperado

81

Esta mañana, comencé a recibir este error de git:

fatal: archivo de índice más pequeño de lo esperado

fatal: estado de git - porcelana fallida

¿Alguna idea de lo que está pasando y cómo solucionarlo?

Karellm
fuente
¿Has probado esto vertis.github.com/2012/01/24/…
Gal Bracha
Sí, lo probé antes de publicarlo. El problema fue con mis submódulos que seguían corrompiendo mi archivo de índice (no sé por qué).
karellm
@karellm ¿Descubriste por qué estaba pasando esto?
crmpicco
No, para ser honesto, no investigué qué lo causó y también dejó de suceder.
karellm
Consejo: En mi experiencia, esto puede deberse a que una carpeta NFS no se actualiza. Si su repositorio está en NFS, espere unos minutos antes de intentar corregir el problema. Tuve esto después de extraer de una máquina y luego verificar el estado en otra, ambas máquinas montando el mismo NFS.
ggll

Respuestas:

107

El archivo de índice se ha dañado, pero se puede volver a crear fácilmente. Solo quítalo ...

rm .git/index

Luego, puede volver a agregar los archivos que está intentando organizar.

meagar
fuente
Como se dijo anteriormente, no funcionaba debido a un conflicto con un submódulo que estaba corrompiendo mi índice una y otra vez ... Eliminé el submódulo, eliminé el índice y agregué todo. Finalmente funcionó. ¡Gracias!
karellm
3
¿Por qué pasó esto? He tenido esto dos veces en la última quincena y no veo una razón para ello.
crmpicco
7
Esto no funcionó para mí. Antes de este error, tenía una copia de trabajo casi limpia. Después de eliminar el archivo de índice y ejecutarlo, git add .se comportó como si cada archivo fuera nuevo y necesitara una confirmación.
Mark
1
Tampoco funciona cuando se tiene un submódulo. Simplemente reinicie (debajo de la respuesta).
TimZaman
Si descubrí que después de ejecutar esto, tuve que hacer una git restore --stagedy solucionó el problema de git pensando que todo debía volver a comprometerse
ViperSniper0501
90

Si desea mantener los cambios locales, utilice lo siguiente:

$ rm .git/index
$ git reset HEAD .

> Unstaged changes after reset:
  modified foo.txt
  modified bar.txt
Scott Paradis
fuente
1
¿Alguna idea de por qué sucede esto? Me ha pasado unas 4-5 veces durante los últimos quince días.
crmpicco
1
Esta respuesta es la mejor aquí. Además, avise si usa submódulos git: elimine también esos archivos de índice (se encuentran en .git/modules/src). Esto me hizo preguntarme por qué el error aún se producía después de eliminar el archivo de índice (principal).
Graftak
Supongo que esto podría suceder por razones estándar, el proceso murió a mitad de camino, sin espacio en el disco, etc. Aunque en mi caso podría ser que use un enlace simbólico a la carpeta git para crear directorios para usar en la construcción en lugar de svn externos , aunque es extraño ya que la única operación en esos repositorios es de solo lectura para restablecer las carpetas de compilación.
jgmjgm
2

Para aquellos que tienen isses incluso después de eliminar el índice y no pueden hacer un reinicio. Si desea mantener los cambios, haga lo siguiente (¡no es una solución, sino una fea solución!).

  1. Haga una copia de seguridad de sus archivos, lo que voy a decir debería funcionar, pero hágalo por si acaso.
  2. Eliminar la carpeta .git
  3. Clona tu repositorio (no importa dónde) lo hice en el directorio actual
  4. Copie el directorio creado desde el clon .git en su directorio actual
  5. Elimine el directorio clonado. 6. Opcional, si volvió a utilizar un pago de sucursal.
  6. El estado de Git ahora debería rastrear los cambios como se supone que debe hacer y todos sus comandos de git deberían funcionar

Mi caso fue como se describió anteriormente, git había estropeado sus referencias ... Git logestaba mostrando "su rama parece estar rota" y git fsckme estaba dando advertencias sobre malas referencias. Pensé si probablemente podría arreglarlo, pero pasaría mucho tiempo haciéndolo, así que opté por la fea solución.

Misho Janev
fuente