Perché Git continua a dirmi che è "Autoimballaggio del repository in background per prestazioni ottimali"?


100

Nota : non penso che questo sia un duplicato di questa domanda , che parla di un pacchetto non in background che blocca git con un messaggio di errore leggermente diverso .


In uno dei miei repository git, ogni volta che invoco (ad esempio) git fetch, git stampa:

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

Sembra stamparlo ogni volta se lo faccio git fetchripetutamente, anche quando non ci sono modifiche e niente git fetchda fare. Questo non ha molto senso per me. Sembra accadere anche con altre operazioni di rete, come git pushe git pull.

Il comando ritorna immediatamente al prompt senza ulteriori output e non riesco a trovare alcun processo git in esecuzione sulla mia macchina. Sembra che accada solo con questo repository e solo su questa macchina. git config -l | grep gcnon restituisce nulla.

Cosa posso fare per diagnosticare o risolvere questo problema?

$ git --version 
git version 2.0.1

Sto usando OS X 10.9.


Sembra lo stesso problema della domanda che hai collegato, ma si verifica abbastanza velocemente da non sembrare bloccato.
Holloway


Trengot, non credo proprio. Il messaggio di errore è leggermente diverso: menziona "lo sfondo".
Andrew Ferrier

Trengot, scusa, avevi ragione, era correlato (il secondo collegamento). Grazie per il puntatore, vedi la mia risposta di seguito per i dettagli.
Andrew Ferrier

Risposte:


167

Ho trovato la soluzione dal secondo commento che hai fornito, Trengot, grazie. Si scopre che avevo dei blob penzoloni, che erano dentro .git/objects/17e quindi innescavano l'imballaggio:

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

Questo li ha puliti:

$ git gc --prune=now

Tieni presente che, come da commento di Henrik di seguito, questo potrebbe essere un po 'pericoloso. Stai attento!


19
Grazie! Questo sembrava funzionare per me. Sii consapevole che --prune=nowè un po 'pericoloso. Per impostazione predefinita, --prunemanterrà 2 settimane di blob pendenti, il che significa che se hai fatto accidentalmente un rebase errato 5 minuti fa o hai rimosso un ramo ieri, puoi ripristinarlo. Una volta eseguito questo comando, perderai tutti i blog sospesi fino ad ora, non 2 settimane fa. Inoltre, sembra che non dovresti mai eseguirlo mentre esegui altri comandi Git in un altro terminale, altrimenti il ​​tuo repository potrebbe danneggiarsi.
Henrik N

3
Mi hai salvato la giornata
Owen Chen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.