¿Cuáles son los "objetos sueltos" a los que se refiere la GUI de Git?

219

Cuando abro la GUI de Git , recibo un mensaje emergente que hace referencia loose objects. Lo hice git gcy eso eliminó el mensaje.

¿Qué son loose objectsy cómo podría evitar que esto vuelva a ocurrir?

oxo
fuente
Simplemente haga clic en "Sí" en el mensaje emergente cuando le pregunte si los objetos sueltos deben empacarse ahora. Git GUI se ejecutará git gcpara usted, con una buena barra de progreso GUI (aunque se muestra como atascado la mayor parte del tiempo).
ADTC

Respuestas:

144

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)

manojlds
fuente
3
La --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.
Cascabel
21
¿Hay algún inconveniente en empacar objetos sueltos? Si no, ¿por qué Git no lo hace automáticamente?
Louis Rhys
13
No creo que sea cierto que suceda automáticamente. Me comprometo a menudo, pero 'git gui' mencionado tenía 50,000 objetos sueltos (y me he estado preguntando por qué git fue tan lento, un gran proyecto durante ~ 4 años sin gc manual)
Kevin
1
@Kevin ¿El rendimiento de su gran proyecto mejoró después de ejecutarse 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.
ADTC
3
@LouisRhys, "Cuando los objetos se escriben en el disco, a menudo está en formato suelto, ya que ese formato es menos costoso de acceder. Sin embargo, eventualmente querrá ahorrar espacio al empacar los objetos" - de Git Book enlace en la respuesta a continuación
chris