El sistema de archivos de Git El sistema de archivos de Git

🥇 El sistema de archivos de Git

🍿 ¿Cómo crear un nuevo repositorio en Git?

Para crear un nuevo repositorio utilizamos el comando init dentro de un nuevo directorio en donde deseamos crear el repositorio.

mkdir mirepositorio
cd mirepositorio
git init .

Una ves que hemos utilizado el comando git init se creará un nuevo directorio oculto llamado .git. Nunca realices cambios en este directorio, ya que es controlado automaticamente por Git.

🍿 ¿Cómo esta constituido el directorio .git?

Si listamos los archivos dentro del directorio .git vamos a ver la siguiente lista de archivos y directorios.

ls -la .git
branches
config
description
HEAD
hooks
info
objects
refs

Git como vemos tiene su propio sistema de archivos, cada uno de ellos tiene un propósito diferente que iremos desglosando.

🍿 ¿Cuántos tipos de archivos existen en el sistema de archivos de Git?

En Git existen 4 tipos de archivos: Blob, Tree, Commit y Annotated Tag. Estos cuatro tipos de objetos permiten almacenar archivos y monitorear los cambios en estos.

En los objetos de tipo Blob en Git almacena archivos, cualquier archivo con cualquier extensión es almacenado como Blob.

En los objetos de tipo Tree (árbol) Git almacena directorios, de la misma forma que cualquier otro tipo de archivos, un directorio puede estar vacío o contener archivos u otros directorios. Por lo cual un Tree puede contener un grupo de Blobs y otros Trees.

Los objetos tipo Commit en Git almacenan las versiones del proyecto.

Los objetos tipo Annotated en Git almacenan texto persistente de un Commit.

En resumen los Blobs son la representación de un archivo en Git mientras que los Tree es la equivalencia de un directorio.

🍿 ¿Cómo hace Git para convertir los archivos de un proyecto de Git, a objetos del sistema de archivos de Git?

Para poder convertir archivos al sistema de Git, Git utiliza dos comandos de bajo nivel.

Para crear nuevos objetos Git utiliza el comando git hash-object.

Para leer los objetos Git utiliza el comando git cat-file.

🍿 ¿Cuátos archivos puede almacenar un proyecto Git?

Git utiliza hashes creados mediante sha1 para crear archivos, con ellos lleva implícitos:

  1. La cantidad de archivos que se pueden crear dentro del mismo repositorio.
  2. La posibilidad de producir el mismo hash en diferentes archivos.

El número de las combinaciones posibles con sha1 es igual a 2 elevado a la 160, lo que representa un número enorme que ademas es tan grande que la probabilidad de tener duplicidades sería prácticamente imposible.

🍿 ¿Cómo explorar los objetos en el sistema de archivos de Git?

Para explorar los archivos de Git vamos a utilizar el comando git cat-file, este comando tiene varias opciones.

Comando Descripción
git cat-file -p HASH Muestra el contenido de un objeto
git cat-file -s HASH Muestra el tamaño de un objeto
git cat-file -t HASH Muestra el tipo de un objeto

🍿 ¿Cómo crear un hash con en el sistema de archivos de Git?

Para crear un hash en el sistema de archivo de Git vamos a utilizar el sistema de pipes de Linux y enviarle al comando git hash-object un texto.

echo "Hola Mundo" | git hash-object --stdin

Esto nos imprimirá el siguiente hash.

22c02951195e38dc2a602ed78dfec38f184f462c

Sin embargo si analizamos la estructura del sistema de archivos de git no encontraremos que se haya creado ningún objeto en .git/objects, y esto lo podemos hacer utilizando el comando tree de Linux.

tree .git

Si deseamos que el hash se escriba en el sistema de archivos requerimos utilizar el parámetro -w como parte del comando hash-object.

echo "Hola Mundo" | git hash-object --stdin -w

en la salida vamos a obtener el hash…

22c02951195e38dc2a602ed78dfec38f184f462c

Ahora si listamos el contenido del sistema de archivos de .git mediante…

tree .git

podremos encontrar nuestro hash dentro de .git/objects…

.git/objects
├── 22
│   └── c02951195e38dc2a602ed78dfec38f184f462c
├── info
└── pack

🍿 ¿Cómo ver el contenido de un object en sistema de archivos de Git?

Para ver el contenido de un object en el sistema de archivos de git utilizamos el comando git cat-file, especificando el parámetro -p y el hash que vamos a desplegar.

git cat-file -p 22c02951195e38dc2a602ed78dfec38f184f462c

La salida es Hola Mundo que es lo que contiene el objeto asociado a este hash.

🍿 ¿Cómo ver el tipo de object en un sistema de archivos de Git?

Para ver el tipo de un object en el sistema de archivos de git utilizamos el comando git cat-file especificando el parámetro -t (type/tipo) y el hash que vamos a desplegar.

git cat-file -t 22c02951195e38dc2a602ed78dfec38f184f462c

La impresión de salida es blob que representa el tipo de objeto asociado a este hash.

🍿 ¿Cómo ver el tamaño de un object en un sistema de archivos de Git?

Para ver el tamaño de un object en sistema de archivos de git utilizamos el comando git cat-file especificando el parámetro -s (size/tamaño).

git cat-file -s 22c02951195e38dc2a602ed78dfec38f184f462c

El resultado de la ejecución es 11.

Instalación de Git
comments powered by Disqus