Domanda

Quanto spesso dovresti usare git-gc?

IL pagina di manuale dice semplicemente:

Gli utenti sono incoraggiati a eseguire questa attività regolarmente all'interno di ciascun repository per mantenere un buon utilizzo dello spazio su disco e buone prestazioni operative.

Esistono alcuni comandi per ottenere alcuni conteggi di oggetti per scoprire se è ora di gc?

È stato utile?

Soluzione

Dipende principalmente da quanto viene utilizzato il repository.Con un utente che effettua il check-in una volta al giorno e un'operazione di ramo/unione/ecc una volta alla settimana, probabilmente non è necessario eseguirla più di una volta all'anno.

Con diverse dozzine di sviluppatori che lavorano su diverse dozzine di progetti, ciascuno dei quali effettua il check-in 2-3 volte al giorno, potresti voler eseguirlo di notte.

Tuttavia, non farà male eseguirlo più frequentemente del necessario.

Quello che farei è eseguirlo ora, poi tra una settimana effettuare una misurazione dell'utilizzo del disco, eseguirlo di nuovo e misurare nuovamente l'utilizzo del disco.Se le dimensioni diminuiscono del 5%, eseguilo una volta alla settimana.Se scende di più, eseguilo più frequentemente.Se scende di meno, eseguilo meno frequentemente.

Altri suggerimenti

Tieni presente che lo svantaggio della raccolta dei rifiuti nel tuo repository è che, beh, i rifiuti vengono raccolti.Come tutti sappiamo come utenti di computer, i file che consideriamo spazzatura in questo momento potrebbero rivelarsi molto preziosi tra tre giorni.Il fatto che git mantenga la maggior parte dei suoi detriti in giro mi ha salvato la pelle diverse volte: esplorando tutti i commit penzolanti, ho recuperato molto lavoro che avevo accidentalmente archiviato.

Quindi non essere troppo maniaco dell’ordine con i tuoi cloni privati.Ce n’è poco bisogno.

OTOH, il valore della recuperabilità dei dati è discutibile per i repository utilizzati principalmente come remoti, ad es.il luogo verso cui tutti gli sviluppatori si sono spinti e/o hanno tirato fuori.Lì potrebbe essere sensato avviare frequentemente un'analisi della classifica generale e un repacking.

Le versioni recenti di git eseguono gc automaticamente quando richiesto, quindi non dovresti fare nulla.Vedi la sezione Opzioni di uomo git-gc(1):"Alcuni comandi git eseguono git gc --auto dopo aver eseguito operazioni che potrebbero creare molti oggetti sciolti."

Se stai usando Git-Gui, Esso ti dice quando dovresti preoccuparti:

This repository currently has approximately 1500 loose objects.

Il seguente comando porterà un numero simile:

$ git count-objects

Tranne, dalla sua fonte, git-gui farà i conti da solo, contando effettivamente qualcosa in .git/objects cartella e probabilmente porta un'approssimazione (non lo so tcl per leggerlo correttamente!).

In ogni caso, esso sembra dare l'avvertimento sulla base di un numero arbitrario in giro 300 oggetti sciolti.

Inseriscilo in un lavoro cron che viene eseguito ogni notte (pomeriggio?) quando dormi.

Uso git gc dopo aver effettuato un grosso checkout e ho molti nuovi oggetti.può risparmiare spazio.Per esempio.se estrai un grande progetto SVN usando git-svn e fai un git gc, in genere risparmi molto spazio

Puoi farlo senza alcuna interruzione, con la nuova impostazione (Git 2.0 Q2 2014). gc.autodetach.

Vedere commetti 4c4ac4d E commetti 9f673f9 (Nguyễn Thái Ngọc Duy, ovvero nuvole):

gc --auto richiede tempo e può bloccare temporaneamente l'utente (ma non per questo meno fastidiosamente).
Fallo funzionare in background sui sistemi che lo supportano.
L'unica cosa persa con l'esecuzione in background sono le stampe.Ma gc output non è davvero interessante.
Puoi mantenerlo in primo piano modificandolo gc.autodetach.


Da quella versione 2.0, però, si è verificato un bug:git 2.7 (Q4 2015) si assicurerà di farlo non perdere il messaggio di errore.
Vedere commetti 329e6e8 (19 settembre 2015) di Nguyễn Thái Ngọc Duy (pclouds).
(Uniti da Junio ​​C Hamano-- gitster -- In commettere 076c827, 15 ottobre 2015)

gc:salva il registro da demonizzato gc --auto e stampalo la prossima volta

Mentre commetti 9f673f9 (gc:opzione di configurazione per l'esecuzione --auto sullo sfondo - 2014-02-08) aiuta a ridurre alcune lamentele riguardo 'gc --auto' monopolizzando il terminale, crea un'altra serie di problemi.

L'ultimo di questo set è, come risultato della demonizzazione, stderr viene chiuso e tutti gli avvisi vengono persi.Questo avvertimento alla fine di cmd_gc() è particolarmente importante perché indica all'utente come evitare "gc --auto"correndo ripetutamente.
Poiché stderr è chiuso, l'utente non lo sa, naturalmente si lamenta di 'gc --auto' spreco di CPU.

Demonizzato gc ora salva stderr A $GIT_DIR/gc.log.
Seguente gc --auto non verrà eseguito e gc.log stampato finché l'utente non lo rimuove gc.log
.

Questa citazione è tratta da;Controllo della versione con Git

Git esegue automaticamente la garbage collection:

• Se ci sono troppi oggetti sciolti nel repository

• Quando avviene un push a un repository remoto

• Dopo alcuni comandi che potrebbero introdurre molti oggetti sciolti

• Quando alcuni comandi come git reflog scadono, lo richiedono esplicitamente

E infine, la raccolta della spazzatura si verifica quando si richiede esplicitamente l'utilizzo del comando GIT GC.Ma quando dovrebbe essere?Non esiste una risposta solida a questa domanda, ma ci sono alcuni buoni consigli e migliori pratiche.

Dovresti prendere in considerazione l'esecuzione manuale di Git GC in alcune situazioni:

• Se hai appena completato un git filter-branch .Ricordiamo che il filamento di filtri riscrive molti commit, ne presenta di nuovi e lascia quelli vecchi su un ref che dovrebbe essere rimosso quando si è soddisfatti dei risultati.Tutti quegli oggetti morti (che non sono più citati da quando hai appena rimosso un ref che li indica) devono essere rimossi tramite la raccolta della spazzatura.

• Dopo alcuni comandi che potrebbero introdurre molti oggetti sciolti.Questo potrebbe essere un grande sforzo Rebase, per esempio.

E il rovescio della medaglia, quando dovresti diffidare della raccolta della spazzatura?

• Se ci sono riferimenti orfani che potresti voler recuperare

• Nel contesto di git rerere e non è necessario salvare le risoluzioni per sempre

• Nel contesto di soli tag e rami sufficienti per far sì che Git mantenga un commit permanente

• Nel contesto dei recuperi FETCH_HEAD (recuperi URL-Direct tramite GIT Fetch) perché sono immediatamente soggetti alla raccolta della spazzatura

• Nel contesto di soli tag e rami sufficienti per far sì che Git mantenga un commit permanente

• Nel contesto dei recuperi FETCH_HEAD (recuperi URL-Direct tramite GIT Fetch) perché sono immediatamente soggetti alla raccolta della spazzatura

Lo utilizzo quando faccio un commit grosso, soprattutto quando rimuovo più file dal repository..dopo, i commit sono più veloci

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top