Respuestas:
Un objeto (blobs, árboles y commits) con SHA say - 810cae53e0f622d6804f063c04a83dbc3a11b7ca se almacenará en
.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca
(la división en los dos primeros caracteres para mejorar el rendimiento del sistema de archivos ya que ahora no todos los objetos están almacenados en el mismo directorio)
Los objetos almacenados como se mencionan anteriormente se denominan objetos sueltos.
Cuando comienzas con tu repositorio, en su mayoría tienes objetos sueltos. A medida que el número aumenta, se vuelve ineficiente y se almacenan en un archivo de paquete. Tales objetos se llaman objetos empaquetados.
git gc
es lo que ejecuta para empacar objetos (por lo general, los objetos sueltos que no son necesarios y de pocas semanas de edad también se eliminan y con la --prune=<date>opción puede forzar la eliminación de objetos sueltos que ya no se necesitan. Como cuando se modifica una confirmación. El objeto de confirmación anterior no es ya se necesita)
--pruneopción está habilitada de manera predeterminada, y dado que git gcse activa automáticamente por el uso común (p commit. Ej. ), Generalmente no tiene que preocuparse por esto. No uso git gui, y no puedo encontrar exactamente dónde se dispara en la fuente, pero o bien hace su propia verificación, o simplemente intercepta el gcdisparado por un comando llamado. Sin embargo, no hay nada de qué preocuparse, solo por el uso normal.
git gcmanualmente? Creo que debería mejorar, porque los objetos sueltos son ineficientes, y 50,000 es un número muy grande. También descubrí que el embalaje reduce en gran medida el espacio utilizado por la .gitcarpeta también.
El Libro Git lo explica bastante bien: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
Los objetos sueltos son el formato más simple. Son simplemente los datos comprimidos almacenados en un solo archivo en el disco. Cada objeto escrito en un archivo separado.
git gcpara usted, con una buena barra de progreso GUI (aunque se muestra como atascado la mayor parte del tiempo).