Risposte:
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.)
--prune
opzione è abilitata per impostazione predefinita e poiché git gc
viene 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' gc
attivazione da un comando chiamato. Non è certo nulla di cui preoccuparsi, tuttavia, causato solo dal normale utilizzo.
git gc
manuale? 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 .git
cartella.
Il Git Book lo spiega abbastanza bene: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
Gli oggetti sciolti sono il formato più semplice. Sono semplicemente i dati compressi memorizzati in un singolo file sul disco. Ogni oggetto scritto in un file separato.
git gc
per te, con una bella barra di avanzamento della GUI (anche se mostrata come bloccata la maggior parte del tempo).