Aggiornamento: git prune
"risolverebbe" il problema, in quanto rimuoverà quegli oggetti sciolti
( git gc
chiamate git prune
, ma solo per oggetti sciolti più vecchi di due settimane, per impostazione predefinita).
Tuttavia, come menziona l' OP Michael Donohue nei commenti:
Mi piace l'aspetto della sicurezza di mantenere gli oggetti sciolti in giro per due settimane, se voglio tornare indietro e guardare alcune vecchie revisioni, quindi non mi piace molto questa soluzione.
Non ho problemi con le dimensioni o le prestazioni di git, è solo "git gui" che insiste nel chiedermi di comprimere il database, anche quando la compressione del database non avrebbe alcun effetto.
Risposta originale:
Il problema della " git gc
" non rimozione di tutti gli oggetti sciolti è stato segnalato in precedenza (alla fine del 2008, " " git gc
"non sembra più rimuovere gli oggetti sciolti "
git gc
rimuove solo gli oggetti sciolti più vecchi di due settimane, se vuoi davvero rimuoverli ora, esegui git prune.
Ma assicurati che nessun altro processo git possa essere attivo quando lo esegui, altrimenti potrebbe calpestare qualcosa.
" git gc
" decomprimerà gli oggetti che sono diventati irraggiungibili e che erano attualmente in pacchetti.
Di conseguenza, la quantità di spazio su disco utilizzata da un repository git può effettivamente aumentare drasticamente dopo un'operazione " git gc
", il che potrebbe essere sorprendente per qualcuno che sta eseguendo quasi al massimo il proprio filesystem, elimina un numero di rami da un repository di tracciamento , e poi un " git gc
" potrebbe ricevere una spiacevole sorpresa.
[
Esempio: i ]
vecchi rami sono riservati tramite un tag come next-20081204
.
Se aggiorni la tua copia locale del linux-next
repository ogni giorno, accumulerai un gran numero di questi vecchi tag di ramo.
Se poi elimini un'intera serie di loro ed eseguigit-gc
, l'operazione richiederà un po 'di tempo e il numero di blocchi e inode utilizzati aumenterà in modo significativo.
Scompariranno dopo un " git prune
", ma quando eseguo questa operazione di pulizia, ho spesso desiderato --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
un'opzione per "git gc".
Quindi nel tuo caso, sarebbe utile un " git prune
"?
(possibilmente con l'utilizzo di "now" nella gc.pruneexpire
variabile di configurazione, necessaria per il comportamento di cui sopra).
Hai anche (dallo stesso thread):
repack -a -d -l
Notare la "a" minuscola.
git-gc
chiama repack con 'A' maiuscola che è ciò che causa la decompressione degli oggetti non raggiungibili. La piccola "a" è per le persone che sanno cosa stanno facendo e vogliono che git rilasci semplicemente oggetti non raggiungibili.