Lo primero que tenemos que tener en cuenta es cómo iniciar un repositorio git y de qué se compone, para ello vamos a crear un pequeño repositorio donde hacer pruebas y mostrar el contenido interno.
Como se puede apreciar, dentro de esa carpeta .git (oculta para el usuario) es donde sucede la magia de git y está compuesta principalmente por las siguientes carpetas:
- .git/branches antigua carpeta donde se guardaba información sobre las distintas ramas del repositorio, actualmente se considera deprecada pero se crea por evitar conflictos.
- .git/hooks almacena pequeños scripts que serán ejecutados en distintos momentos, ideales para hacer comprobaciones antes de subir código al repositorio remoto ;)
- .git/info contiene información adicional sobre el repositorio.
- .git/refs actualmente se usa como almacén de referencias dentro del repositorio, esto son tanto las etiquetas de versiones como las distintas ramas de trabajo.
- .git/objects esta es la carpeta más interesante de todas, aquí se almacena la información del repositorio en sí, es decir, aquí es donde se guarda el contenido de los archivos.
- config almacena la configuración propia del repositorio, cómo por ejemplo cuales son los repositorios remotos o configuración del usuario, si quieres saber más: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
- HEAD hace referencia a la posición actual en el repositorio, es decir a la rama donde está trabajando (p.ej. master)
¿Cómo almacena git el contenido?
Ahora nuestra carpeta .git/objects ya contiene un archivo, en este caso localizado en .git/objects/eb/d770c4ec1aeb9db7d5cc43fd0186bad6edf022. Cabe destacar el uso de una carpeta con los dos primeros caracteres, esto lo realiza para optimizar las búsquedas en los repositorios en los que existen gran cantidad de objetos.
Si quisiéramos ver el contenido de uno de estos objetos, se puede usar el comando git cat-file que se encargará de devolvernos el contenido de ese objeto, si usásemos el comando cat nos encontraríamos con contenido binario y comprimido ilegible, os recomiendo hacer una pequeña prueba.
Con este sencillo comando, se puede leer el contenido de los distintos blobs pertenecientes a un repositorio, a destacar el uso de -p para indicarle que interprete el tipo de dato del que se trata, pues ya veremos en posteriores post que puede haber varios.