¿Cómo arreglar el repository git roto por fetch git interrumpido?

Si la git fetch se interrumpe, por ejemplo, por Ctrl-C o por problemas de conectividad, después de esa git fetch y también de git pull no funciona.

 user@computer:~/code/openttd-git$ git fetch ^C user@computer:~/code/openttd-git$ git fetch error: Unable to find 22d90742fc79a9011fb86ee03d8aeea66bc12657 under http://git.openttd.org/openttd/trunk.git Cannot obtain needed object 22d90742fc79a9011fb86ee03d8aeea66bc12657 error: Fetch failed. 

Creo que esto no está relacionado con el repository. Usar git clone para crear una copy de este repository local roto en un nuevo repository local no soluciona esto. La única solución que conozco hasta ahora es git clone todo el repository remoto ( origin/master ) en un nuevo repository local. Pero, ¿hay alguna solución mejor (más rápida)?

Hay un informe de errores de Debian que tiene el último post de febrero de 2011. ¿Es este el mismo error que tengo o ya existe una solución o una solución o una solución a esto? Mi versión de git es 1.7.10.

encuentre un *.pack.temp en .git/objects/pack en su repository local. A continuación, busque un file .idx con el mismo nombre base y .idx ambos (o elimínelos, pero es mejor estar seguro que lamentar). Vuelva a ejecutar git fetch y debería funcionar (bueno, lo hizo por mí).

Por ejemplo:

 % git fetch error: Unable to find a4fb0b54b2609df8a1ee4b97c268d205fc5bf9f1 under https://www.example.com/~someuser/something.git Cannot obtain needed object a4fb0b54b2609df8a1ee4b97c268d205fc5bf9f1 error: fetch failed. % ls -l .git/objects/pack total 65872 -rw-r--r-- 1 someuser someuser 64072 Feb 12 2014 pack-2e31e66e67d8596f1193bbbc06c87293900c6e45.idx -rw-r--r-- 1 someuser someuser 16920 Jul 21 2013 pack-3d76e0bf6c67d71913efc0711d56f04c7f79b95d.idx -rw-r--r-- 1 someuser someuser 62224 Feb 11 2014 pack-74107fa80989df6619479874d94b5f8ed010fd2f.idx -rw-r--r-- 1 someuser someuser 96552 Oct 30 22:55 pack-bb75633331ea0e74d4d3cb29f7660e1ba00fb899.idx -rw-r--r-- 1 someuser someuser 73228 Mar 6 2014 pack-de0c1bcf3550cd7a2fd0c5a981bc17d15f1144c0.idx -r--r--r-- 1 someuser someuser 129144 Feb 2 18:57 pack-ffb25d036dea040923468e2de07023f9b497aeb7.idx -r--r--r-- 1 someuser someuser 46413554 Feb 2 18:57 pack-ffb25d036dea040923468e2de07023f9b497aeb7.pack -r--r--r-- 1 someuser someuser 129312 Feb 2 19:10 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.idx -rw-r--r-- 1 someuser someuser 20450545 Feb 2 19:09 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.pack -rw-r--r-- 1 someuser someuser 129312 Feb 2 18:36 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.idx -rw-r--r-- 1 someuser someuser 9863168 Feb 2 18:37 pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.pack.temp % mv .git/objects/pack/pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.idx /tmp/ % mv .git/objects/pack/pack-ffbdfa2c676aaf392ea722cb68eaa87e45af092c.pack.temp /tmp/ % git fetch From https://www.example.com/~someuser/something 3288ab9..a4fb0b5 master -> origin/master 

Pruebe estos commands:

 git fsck git gc 
 man git-fsck 

dice usar rsync:

Cualquier object corrupto que deba encontrar en copys de security u otros files (es decir, puede eliminarlos y realizar una synchronization con otro sitio con la esperanza de que alguien más tenga el object que ha dañado).

 rsync -av user@host:repo/.git ./.git 

trabajó para mi

¿Eres capaz de ejecutar:

 git reset --hard <some prior commit> 

En teoría, si acaba de ejecutar git fetch , debería ser capaz de:

 git reset --hard HEAD 

Esto debería descartar los cambios causados ​​por la operación de búsqueda interrumpida, devolviendo el repository a un estado anterior. En este punto, debería poder volver a ejecutar su operación de fetch .

¿Has intentado limpiar el repository?

 git gc 

Se advirtió, ya que el command anterior también limpia las cosas de reflog.

Es probable que el repository esté dañado. Ejecutar git fsck y git gc en el server podría resolverlo. La clonación en un directory separado y extracción desde ese directory también le dará los commits. Después, una git fetch funcionará, ya que solo actualiza las references y no tiene que search ningún object.