Una explicación en 45 minutos de las estructuras de datos utilizadas internamente por parte de Git para almacenar la información. Veremos cómo acceder y manipular estas estructuras.
tipo de objeto y la longitud del mismo. • Se concatena con los datos que se van a almacenar • Se calcula su sha1 que se utilizará como nombre del objeto. • Se comprime con zlib. • Se almacena en .git/objects/XX/XXXXXX. . .
objetos en packs (gc). • Se almacenan en .git/objects/pack/. • Hay un listado de packs en .git/objects/info/packs. • Cada pack tiene su índice en .git/objects/pack/.
o a objetos tag. • Los tags simples son una referencia a un commit. • Los tags con anotaciones son una referencia a un objeto tag que apunta a un commit.
a la BBDD de objetos. • Añade el commit, que apunte al tree recien añadido y al commit actual como padre, a la BBDD de objetos. • Modifica el HEAD. • Modifica la referencia de la rama actual.
y la apunta al commit que le digas. • Dependiendo del tipo de reset modifica el index para ajustarlo al nuevo commit. • Dependiendo del tipo de resed modifica la working copy para ajustarlo al nuevo commit.
aplican uno a uno los commits de la rama destino desde el último commit común. • Se actualiza la referencia de la rama destino para que apunte al último commit.
a mezclar. • Calcula las diferencias de cada rama. • Mezcla las ambas diferencias. • Genera un commit con tantos padres como ramas a mezclar y con la mezcla de las diferencias aplicada. • Actualiza la referencia de la rama destino a este nuevo commit.
cambios actuales. • Genera y almacena un commit a partir de estos cambios. • Actualiza la referencia .git/refs/stash • Añade una entrada al reflog de la referencia stash • Cuando hacemos stash pop aplicamos los cambios del commit y eliminamos la última entrada del reflog.
Más comandos de plumbing. • Protocolos de transferencia. • Mantenimiento y recuperación de datos. • fsck. • Otros formatos internos de fichero (index, packs, pack- idx…).