2015-02-20 12 views
55

Nota: Io Non credo che questo è un duplicato di this question, che sta parlando di un non-background pacchetto che pende git con un messaggio di errore sottilmente diverso.Perché git continua a dirmi che è "il riempimento automatico del repository in background per prestazioni ottimali"?


In uno dei miei repository git, ogni volta invoco (per esempio) git fetch, stampe git:

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

sembra stampare questa ogni volta che se faccio un git fetch più volte, anche quando non ci sono modifiche e nulla da fare per git fetch. Questo non ha molto senso per me. Sembra anche che accada con altre operazioni di rete, come ad esempio git push e git pull.

Il comando ritorna immediatamente al prompt senza ulteriore 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 gc non restituisce nulla.

Cosa posso fare per diagnosticare o risolvere questo problema?

$ git --version 
git version 2.0.1 

Sto usando OS X 10.9.

+0

Sembra lo stesso problema della domanda che hai collegato, ma sta succedendo abbastanza velocemente da non sembrare sospeso. – Holloway

+0

Anche [possibilmente correlati] (http://stackoverflow.com/questions/17925471/why-does-git-run-auto-packing-on-every-push-to-our-repo) – Holloway

+0

Trengot, non lo faccio pensa così Il messaggio di errore è leggermente diverso - menziona "lo sfondo". –

risposta

105

Ho trovato la soluzione dal secondo commento che hai fornito, Trengot, grazie. Si scopre che ho avuto alcuni blob penzoloni, che erano in .git/objects/17 e quindi innescando l'imballaggio:

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

Questo li ripulito:

$ git gc --prune=now 

essere consapevoli, come da commento di Henrik di seguito, questo può essere un po 'pericoloso Stai attento!

+2

Grazie! Questo sembrava funzionare per me. Tieni presente che '--prune = now' è un po 'pericoloso. Per impostazione predefinita, '--prune' manterrà 2 settimane di blob penzolanti, il che significa che se hai eseguito accidentalmente una rebase errata 5 minuti fa o hai rimosso una filiale ieri, puoi recuperare. Una volta eseguito questo comando, perdi tutti i blog che pendono fino a ora, non due settimane fa. Inoltre, [sembra] (https://git-scm.com/docs/git-gc) come non dovresti mai eseguirlo mentre esegui altri comandi Git in un altro terminale, o il tuo repository può diventare corrotto. –

+1

Buon punto, @ HenrikN, ho aggiunto un commento alla mia risposta. –