name git gerrit

git - gerrit name



¿Cómo puedo recuperar mi repositorio Git para un error de "árbol faltante"? (11)

Estamos utilizando Gerrit para nuestro repositorio Git. En un proyecto que ha estado activo durante varios meses, de repente no podemos impulsar ningún cambio. Cuando ejecutamos git push vemos el siguiente error:

error: unpack failed: error Missing tree 14d62f0ed4385e3f68f226ac133fa9932a9c65c9

Ejecutando git fsck --full producciones completas

dangling tree 2701c92fb6eab1826482f6bcc9598413e651a92a dangling blob c505b3b12cfacd1e26dec8dc559820a30fc20c27 dangling blob 8907f94b5b4ec881e1b86d50681795e368c167ff dangling blob 4938d9fc34c6e2f92c68872bfec6e070b2b3a9c2 dangling blob 8a5c8b8d35484ea1470e2d8e6c482fcb97b23d0f dangling commit 3072d3314e20bf6c6998e1c02986d83019d3e1df dangling tree 5377d7f7111d340854c3ee0946667c202227e603 dangling tree c3783e9ab540457924ceb9f9fb5ea1c2b97472b1 dangling blob 8b92d1765038e4ec5e721f98a2aabb305a7f9819 dangling tree 38a03153f0f18ca15846e9bd4983a86800a43a94 dangling commit 8db2d6ae5364174bebe13720a359ddb2e62d4c9d

Todos nuestros desarrolladores están experimentando el mismo error cuando intentan presionar. Hasta ahora, hemos intentado reiniciar el repositorio de gerrit (git init --bare ...) y empujarlo hacia arriba. También hemos intentado crear un nuevo proyecto gerrit con un repositorio separado. Al final, seguimos recibiendo el mismo error.

¿Alguien tiene alguna idea sobre cuál sería la causa o cómo recuperarse?


Cuando obtenemos esto, casi siempre puedo arreglarlo con un git gc:

git gc --aggressive --prune=now

Copia de seguridad de su git repo primero!


Esto generalmente ocurre cuando el tiempo de cometer y empujar es diferente y, en última instancia, crea un desajuste entre ambos árboles. Dada una rama remota aguas arriba y local rama foo

En primer lugar tirar todos los cambios no comprometidos usando

git reset --hard foo

Luego rastrea la rama remota usando

git branch --set-upstream-to=upstream/foo

Y finalmente

git pull


Estoy recibiendo este mismo error en mi git tortuse. Finalmente me sale la causa de este error.

Los pasos que causa este error;

  • Crear una nueva rama en la cabeza.
  • Hacer algunas modificaciones en nuevas sucursales.
  • Alguien también hace modificaciones en la rama principal.
  • Intenta empujar tu rama

Este error ocurrirá si se crea una rama local y no se empuja hasta que se realicen algunas modificaciones en la rama principal. Esto es algo normal, ya que la sucursal principal remota no sabe nada acerca de su sucursal local hasta que se realiza una acción de inserción.

Para resolver este error, cambie la rama principal y obtenga una acción de extracción completa. Luego cambia tu rama e intenta un empuje.


Intente actualizar su versión de git, vimos problemas con 1.9.0


La solución rápida es Fetch -> Rebase-> Commit y luego Push.


Pruebe un git pull --rebase .

git show > ~/mychanges.txt el diff ( git show > ~/mychanges.txt , saqué el git show > ~/mychanges.txt confirmación en la parte superior del archivo). git checkout -b newbranch una nueva rama ( git checkout -b newbranch ) aplicó los cambios ( git apply ~/mychanges.txt ), y luego hizo un git pull --rebase . Entonces todo funcionó.


Realice una copia de seguridad ... realice una copia de seguridad en este momento antes de intentar algo.

Ahora, eso suena desafortunado. También es una pena que no parezca que tienes una copia de seguridad regular a la que ir. Sin embargo, hay buenas noticias: apuesto a que los desarrolladores tienen este archivo, aunque puede estar en un paquete. Intente lo siguiente en el directorio .git de otra persona. Tenga en cuenta que git utiliza los dos primeros caracteres del hash para el nombre del directorio.

find . -name d62f0ed4385e3f68f226ac133fa9932a9c65c9

Si eso aparece, copie ese archivo en la misma ruta relativa en su servidor, y la vida debería avanzar muy bien. Si no, prueba esto:

find . -name /*.idx -exec cat {} /; | git show-index | grep 14d62f0ed4385e3f68f226ac133fa9932a9c65c9

Eso no le mostrará qué archivo de paquete es (puede hacer un script rápido o hacerlo manualmente), pero le dirá que está allí. Encuentra el archivo del paquete correcto y expándelo ...

git unpack-objects $FILE

Desde allí, copie el archivo a la misma ruta relativa en su servidor. Si eso no lo resuelve, se necesita más trabajo. Cambiar un repositorio lo suficientemente actualizado como para un desarrollador puede arreglar las cosas. También puede explorar https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F , o publicar comentarios de actualización y esperar a que vuelva a esto.


Si no está en la rama maestra, simplemente puede eliminar la rama remota mediante:

git push --delete origin <branch_name>

Y luego empuje su rama hacia el control remoto:

git push -u origin <branch_name>


Técnicamente, esta respuesta es un poco tarde, pero lo que funcionó para mí fue crear un parche para el conjunto de cambios que estaba tratando de empujar, volver a conectar el repositorio a otra ubicación del disco, aplicar el parche, volver a comprometerse y presionar.


Use git push --no-thin lugar de git push .

Desde Git docs:

Una transferencia delgada reduce significativamente la cantidad de datos enviados cuando el remitente y el receptor comparten muchos de los mismos objetos en común. El valor predeterminado es --thin.


Yo tuve el mismo problema. Para resolver esto utilicé git fetch, luego presioné de nuevo y funcionó bien.