Quali sono gli "oggetti sciolti" a cui fa riferimento la GUI di Git?


219

Quando apro la GUI di Git , ricevo un messaggio popup a cui si fa riferimento loose objects. L'ho fatto git gce questo ha rimosso il messaggio.

Cosa sono loose objectse come ho potuto evitare che ciò accada di nuovo?


Puoi semplicemente fare clic su "Sì" nel messaggio popup quando viene richiesto se gli oggetti sfusi devono essere impacchettati ora. Git GUI funzionerà git gcper te, con una bella barra di avanzamento della GUI (anche se mostrata come bloccata la maggior parte del tempo).
ADTC,

Risposte:


144

Un oggetto (BLOB, alberi e commit) con SHA dire: 810cae53e0f622d6804f063c04a83dbc3a11b7ca verrà archiviato in

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(la divisione in primi due caratteri per migliorare le prestazioni del file system in quanto ora non tutti gli oggetti sono memorizzati nella stessa directory)

Gli oggetti memorizzati come sopra sono indicati come oggetti sciolti.

Quando inizi con il tuo repository, hai principalmente oggetti sciolti. Man mano che il numero aumenta, diventa inefficiente e vengono memorizzati in un file pack. Tali oggetti sono chiamati oggetti impacchettati.

 git gc

è ciò che esegui per impacchettare gli oggetti (di solito vengono rimossi oggetti non necessari e alcune settimane vengono rimossi e con l' --prune=<date>opzione puoi forzare la rimozione di oggetti sfusi non più necessari. Come quando modifichi un commit. Il vecchio oggetto commit non è più necessario.)


3
L' --pruneopzione è abilitata per impostazione predefinita e poiché git gcviene automaticamente attivata dall'uso comune (ad esempio commit), di solito non devi preoccuparti di questo. Non uso git gui e non riesco a trovare esattamente dove è attivato nella fonte, ma o fa il suo controllo o intercetta semplicemente l' gcattivazione da un comando chiamato. Non è certo nulla di cui preoccuparsi, tuttavia, causato solo dal normale utilizzo.
Cascabel,

21
c'è qualche svantaggio nel confezionare oggetti sfusi? In caso contrario, perché Git non lo fa automaticamente?
Louis Rhys,

13
Non penso sia vero che accada automaticamente. Mi impegno spesso, ma "git gui" menzionato aveva 50.000 oggetti sfusi (e mi chiedevo perché Git fosse così dannatamente lento, grande progetto per circa 4 anni senza manuale)
Kevin,

1
@Kevin Le prestazioni del tuo grande progetto sono migliorate dopo l'esecuzione git gcmanuale? Penso che dovrebbe migliorare, perché gli oggetti sciolti sono inefficienti e 50.000 è un numero molto grande. Ho anche scoperto che l'imballaggio riduce notevolmente anche lo spazio utilizzato dalla .gitcartella.
ADTC,

3
@LouisRhys, "Quando gli oggetti vengono scritti su disco, è spesso in formato sciolto, poiché tale formato è meno costoso da accedere. Tuttavia, alla fine ti consigliamo di risparmiare spazio imballando gli oggetti" - da Git Book link nella risposta di seguito
chris,

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.