2012-01-25 9 views
14

Tengo una copia local de un repositorio que ya no tiene ningún control remoto asociado. estoy tratando de empujar esta repo en un nuevo mando a distancia sin embargo cada vez que sale este mensaje:Cómo reparar un objeto de árbol de git malo

error: Could not read 9eefe9305253b2c039a54cbc8aa22f7f8e6e8790 
fatal: bad tree object 9eefe9305253b2c039a54cbc8aa22f7f8e6e8790 

leí en cuestiones similares aquí que una manera de solucionarlo es la recuperación de este objeto de otras copias del repositorio o haciendo un reinicio por hardware. No puedo hacer ninguna de las dos ya que no tengo otra copia de este repositorio.

¿Hay alguna manera de eliminar simplemente este compromiso u otro tipo de solución que me permita llevar el repositorio al nuevo historial de mantenimiento remoto?

+0

No necesita un control remoto o "otra copia de este informe" para hacer un 'git reset --hard'. – vcsjones

+0

Gracias, no lo sabía. Lo acabo de hacer, pero el problema todavía existe, la comisión que está dando problemas es muy antigua. – Flupkear

+0

de dos maneras: una: mire directamente el archivo (descomprima el contenido) y vea si puede solucionarlo. dos: encuentre la confirmación que hace referencia al árbol en cuestión y haga un restablecimiento completo al padre de esa confirmación. Dependiendo de qué commit es que haga referencia al árbol concerniente, es posible que pierda una gran cantidad de datos. –

Respuesta

2

Para solucionar realmente el problema y no perder ningún dato (a condición de que ese árbol es el único objeto que falta, lo cual dudo) que podría intentar esto:

  1. pago y envío a los padres cometen del cometen con el relativo árbol
  2. tratar git-gato -p fichero con el nombre de la problemática se comprometen a ver cuál es el mensaje del informe dice (esperemos que le dirá lo que ha cambiado)
  3. ahora usted puede ser capaz de determinar los cambios que se hecho y de esto se puede inferir la estructura del directorio.
  4. si funcionan 3, entonces puede crear su árbol manualmente usando un editor de texto y un compresor zlib. Las entradas en el archivo de salida serán otros objetos de árbol o blobs. Con suerte, la mayoría de los archivos y carpetas se comparten (no tienen cambios) entre las dos confirmaciones. Esto le permitirá reutilizar la mayoría de las entradas desde el árbol objeto de la confirmación comprobada.
+1

El problema es que falta el archivo, cuando ejecuté * git cat-file -p ... * Entiendo esto: error: no se puede encontrar 9e108293be3997c2d922b4c473a5a28cc737e446 – Flupkear

+0

Bueno, podrías mirar el compromiso manualmente ... pero lo más probable es que tengas que escribir un script que lo haga por ti. Consulte esta página para obtener una descripción general de cómo se ve el formato de archivo: http://book.git-scm.com/1_the_git_object_model.html –

+0

¿Cómo se crea manualmente su árbol? – MikeKusold

0

Tuve este problema. Al reiniciar mi computadora, realmente se solucionó, así que pruébalo primero antes de hacer cualquier otra cosa. ¡O tal vez solo tuve suerte pero vale la pena intentarlo!

+1

esto no funcionó para mí :( – rfcoder89

0

Simplemente Salga de la aplicación con la que accede a git y reinicie. Trabajé para mí para xcode-iOS.

+2

"¿Has intentado apagarlo y encenderlo de nuevo?" – Martin

0

Tengo mi git repo en un directorio que también está en la carpeta OneDrive en mi computadora. Si usa OneDrive en otra máquina, presione desde el repositorio en esa computadora y luego tire/empuje desde su propia máquina nuevamente.

Cuestiones relacionadas