Aggiornamento: git prune
sarebbe "risolvere" il problema, nel senso che rimuoverà quegli oggetti sciolti
(git gc
chiamate git prune
, ma solo per gli oggetti sciolti più vecchi di due settimane, per impostazione predefinita).
Tuttavia, come la OP Michael Donohue menzioni nei commenti:
mi piace l'aspetto della sicurezza di tenere gli oggetti liberi in giro per due settimane, dovrei desiderare di tornare indietro e guardare alcune vecchie revisioni, così ho don Mi piace molto questa soluzione.
Non ho alcun problema con le dimensioni o le prestazioni di git, è solo 'git gui' che insiste nel chiedermi di comprimere il database, anche se la compressione del database non avrebbe alcun effetto.
risposta originale:
Il problema della "git gc
" non rimuovendo tutti oggetti liberi stato segnalato prima (fine del 2008, ""git gc
" doesn't seem to remove loose objects any more"
git gc
rimuove solo sciolto oggetti più vecchi di due settimane, se davvero vuoi rimuoverli adesso, esegui git prune
Ma fai certo nessun altro processo git può essere attivo quando lo si esegue, o potrebbe eventualmente fare un passo su su qualcosa.
"git gc
" sarà decomprimere oggetti che sono diventati irraggiungibili ed erano attualmente in pacchetti.
Come risultato, la quantità di spazio su disco utilizzata da un repository git può effettivamente andare su in modo drammatico dopo un'operazione "git gc
", che potrebbe essere sorprendente per qualcuno che sta correndo vicino al suo filesystem, elimina un numero di rami da un repository di tracciamento, e quindi fa un "git gc
" può ottenere una sorpresa molto spiacevole.
[
Esempio: ]
I vecchi rami sono riservati tramite un tag come next-20081204
.
Se si aggiorna la copia locale del repository linux-next
ogni giorno, si accumulerà un gran numero di questi vecchi tag di ramo.
Se si elimina una serie intera di esse ed è in esecuzione git-gc
, l'operazione richiederà un po 'di tempo e il numero di blocchi e di inode utilizzati aumenterà in modo significativo.
Essi scompaiono dopo un "git prune
", ma quando eseguo questa operazione di manutenzione, ho spesso desiderato l'opzione --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
per "git gc".
Quindi, nel tuo caso, sarebbe un "git prune
" essere utile?
(possibilmente con l'utilizzo di "now" nella variabile di configurazione gc.pruneexpire
, necessario per il comportamento sopra riportato).
Hai anche (dallo stesso filo):
repack -a -d -l
Avviso la minuscola 'a'.
git-gc
chiama repack con maiuscolo 'A', che è ciò che causa lo spacchettamento degli oggetti non raggiungibili. Little 'a', è per le persone che sanno quello che stanno facendo e vogliono che git tocchi solo oggetti irraggiungibili.
Quella finestra di dialogo è un ottimo esempio di una "funzione" che molte persone vorrebbero che non esistesse . Non è solo fastidioso, può cancellare importanti commit che sono stati rimossi dopo un hard reset. – adelriosantiago