2010-11-18 17 views
8

Tengo grandes problemas con un repositorio git en mi máquina local.Árbol de git corrupto?

Modifiqué un archivo, ejecuté git status y el archivo apareció como modificado. Agregué el archivo usando git add . y funcionó como de costumbre. Pero cuando estaba a punto de confirmar los cambios, tengo el siguiente error:

error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea' 
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted 

Mediante la ejecución de git cat-file -t e91ce852822d32e380ed7ddd04c93066e3c600ea, puedo ver que el objeto es un árbol.

He visto varias soluciones sobre cómo reparar un blob o confirmación comprometidos, pero este es un árbol, y no puedo encontrar una respuesta sobre qué podría haber fallado, o cómo solucionarlo.

Cualquier ayuda apreciado :)

+2

¿Ha ejecutado 'git fsck'? –

+0

Sí, el mismo error. Sin embargo, es otro objeto, también es un árbol. –

+0

@MarkRushakoff: Acabo de recibir el mismo error que Olof, y 'git fsck' solo emite el mismo mensaje de error. –

Respuesta

2

Lo que podría haber ido mal es difícil de decir, y depende de su versión de Git y el medio ambiente.
Por ejemplo, en los viejos tiempos, había un zlib issue with git1.5.1 disparando ese tipo de mensaje debido a una configuración legacyheaders = false.

En cuanto a la restauración de un árbol de loose objects, este SO respuesta "How to recover Git objects damaged by hard disk failure?" ilustra una forma de hacerlo, después de que un git fsck --full (como Mark Rushakoff menciona en el comentario) se ha realizado.

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee 

and check the type of the object.

If the type is tree: you could use 'git ls-tree' to recover the tree from previous backups; then ' git mktree ' to write it again in your current repository.

Pero supongamos que la búsqueda de los objetos, ya sea en envases de más edad o en las copias de seguridad del repositorio.

+0

También tropecé con esa pregunta, pero .git/objects/pack/está vacío. ¿Cómo realizo una búsqueda a través de paquetes anteriores? –

+0

@Olof: ¿paquetes anteriores? Creo que aquí es donde entra la última frase "Pero eso suponga encontrar esos objetos en paquetes viejos o en copias de seguridad del repositorio". ¿Tiene alguna copia de seguridad? – VonC

+0

Tengo una copia de seguridad, pero lamentablemente tiene alrededor de un mes. ¿Cómo los encuentro en paquetes más viejos? No puedo pagar una confirmación anterior tampoco, lo único que parece funcionar es git log. –

-2

Buenos días, por mi parte, acabo de eliminar el directorio git, y reiniciar git.

+0

¿Quiere decir eliminar el directorio '.git'? entonces ... no 'git init', ¿supongo? –

3

Si su repositorio git se sincroniza con un ressource externa (Github) y si cualquier solución no funcionó, puede re-init tu repositorio

lo que he hecho:

# copy the corrupted .git dir 
mv -f .git .gitback 
git init 
# keep your config file 
cp .gitback/config .git/config 
# load objects 
git pull 

Funcionó. Obviamente, no es una gran solución, pero puede ayudar

+0

a veces, esto es todo lo que puede hacer. No es una gran solución, y realmente solo aceptable en proyectos en solitario :) –

Cuestiones relacionadas