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.)
--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.
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.
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 gcper te, con una bella barra di avanzamento della GUI (anche se mostrata come bloccata la maggior parte del tempo).