Pourquoi git n'arrête-t-il pas de me dire que c'est «Auto empaquetant le dépôt en arrière-plan pour des performances optimales»?

100

Remarque : je ne pense pas que ce soit un doublon de cette question , qui parle d'un pack sans arrière-plan qui bloque git avec un message d'erreur subtilement différent .


Dans l'un de mes référentiels git, chaque fois que j'invoque (par exemple) git fetch, git imprime:

Auto packing the repository in background for optimum performance.
See "git help gc" for manual housekeeping.

Il semble imprimer cela à chaque fois si je fais un à git fetchplusieurs reprises, même s'il n'y a pas de changements et rien git fetchà faire. Cela n'a pas beaucoup de sens pour moi. Cela semble également se produire avec d'autres opérations réseau, telles que git pushet git pull.

La commande revient instantanément à l'invite sans autre sortie, et je ne trouve aucun processus git en cours d'exécution sur ma machine. Cela semble ne se produire qu'avec ce référentiel, et uniquement sur cette machine. git config -l | grep gcne renvoie rien.

Que puis-je faire pour diagnostiquer ou résoudre ce problème?

$ git --version 
git version 2.0.1

J'utilise OS X 10.9.

Andrew Ferrier
la source
Cela ressemble au même problème que la question que vous avez liée, mais se produit juste assez rapidement pour ne pas sembler se bloquer.
Holloway
Également possiblement lié
Holloway
Trengot, je ne pense pas. Le message d'erreur est légèrement différent - il mentionne «l'arrière-plan».
Andrew Ferrier
Trengot, désolé, tu avais raison, c'était lié (le deuxième lien). Merci pour le pointeur, voir ma réponse ci-dessous pour plus de détails.
Andrew Ferrier

Réponses:

167

J'ai trouvé la solution dans le deuxième commentaire que vous avez fourni, Trengot, merci. Il s'avère que j'avais des gouttes pendantes, qui étaient à l'intérieur .git/objects/17et déclenchaient donc l'emballage:

$ git fsck
dangling blob d9ff0aeac4aa8b4e0907daed675ebf60278bc977
dangling blob dbff2d073741f9775c815d4a3c623736af224dad
dangling blob e1ffbab1c5b985cd1cd3bc0281075ea2ed80744a
dangling blob fdff59878ccb3a75689f4acca615cfb635288774

Cela les a nettoyés:

$ git gc --prune=now

Soyez conscient, selon le commentaire d'Henrik ci-dessous, cela peut être un peu dangereux. Prends soin de toi!

Andrew Ferrier
la source
19
Merci! Cela semblait fonctionner pour moi. Sachez que --prune=nowc'est un peu dangereux. Par défaut, --pruneconservera 2 semaines de blobs pendantes, ce qui signifie que si vous avez accidentellement fait un rebase incorrect il y a 5 minutes, ou supprimé une branche hier, vous pouvez récupérer. Une fois que vous exécutez cette commande, vous perdez tous les blogs en suspens jusqu'à maintenant - pas il y a 2 semaines. En outre, il semble que vous ne devriez jamais l'exécuter en exécutant d'autres commandes Git dans un autre terminal, sinon votre dépôt peut être corrompu.
Henrik N
3
Vous avez sauvé ma journée
Owen Chen