# Nucleo git: como almacena git

En el core de git hay un mapa que consta de una **clave** y un **valor**, el **valor** puede ser cualquier cosa, un string, un objeto, un mar de bites, un folder, un archivo, un commit etc.. La **clave** la genera git.

La **clave** es un equivalente a el **valor** pero convertido en hexadecimal a través del algoritmo de encripción SHA1:

| Clave                                    | Valor       |
| ---------------------------------------- | ----------- |
| 23991897e13e47ed0adb91a0082c31c82fe0cbe5 | "Apple Pie" |

## Estructura de folders git

Cuando iniciamos un repositorio con el comando:

```
git init
```

se crea inmediatamente un folder oculto con el nombre ".git", es el folder donde se almacenaran (y persiste) los datos y nuestro mapa "clave valor" con una estructura particular para ordenar los valores y archivos (valores).

La folder mas importante dentro de .git es "objects" folder:

![](https://151692080-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LoQv9TWpDFWC4qENtD_%2F-LoQvB-gvUJ3jQ_ALANV%2F-LoQvBsSjMjoaTajbri2%2Ffolders_git.png?generation=1568131568068780\&alt=media)

como podemos notar la clave (hash) dividida en dos partes: los primeros dos dígitos del hash son un folder y el restante es un archivo dentro de ese folder.

Con el siguiente comando podremos consultar la "clave" almacenada en nuestro repositorio git:

```
git cat-file bff758505dfec95aa12cbf596955c158744ae321 -p
"Apple Pie"
```

Imprime el la consola el contenido en el archivo, en lugar de el flag **-p** podría poner **-t** para conocer el tipo de archivo almacenado, en este caso git almacena los archivos de tipo [blob (Binary Large Objects, objetos binarios grandes)](https://es.wikipedia.org/wiki/Binary_large_object)
