5 - Estados de los archivos cuando trabajamos con Git

Git tiene tres estados principales en los que se pueden encontrar los archivos de un proyecto:

  • Modificado: Significa que has modificado el archivo pero todavía no lo has confirmado a la base de datos de Git.
  • Preparado: Significa que hemos marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.
  • Confirmado: Significa que los datos están almacenados de manera segura en la base de datos de git.

Las tres secciones principales de un proyecto Git

El directorio de trabajo (working directory), el área de preparación (staging area) y el directorio de Git (.git directory):

estado de los archivos cuando trabajamos con git

El directorio de Git (.git directory) es donde se almacenan los metadatos y la base de datos de git para el proyecto. Es la parte más importante de Git, y es lo que se copia cuando clonas un repositorio desde por ejemplo github u otro servidor.

El directorio de trabajo es una copia de una versión del proyecto. Estos archivos se sacan de la base de datos de git comprimida en el directorio de .git, y se colocan en disco para que los podamos usar y/o modificar.

El área de preparación es un archivo, generalmente contenido también en el directorio de .git, que almacena información acerca de lo que va a ir en la próxima confirmación para que quede firme en el repositorio.

La metodología más común de trabajar con Git es la siguiente:

  1. Creamos y modificamos una serie de archivos en tu directorio de trabajo.
  2. Preparamos los archivos, añadiéndolos al área de preparación.
  3. Confirmamos los cambios, lo que toma los archivos tal y como están en el área de preparación y almacenamos esa copia instantánea de manera permanente en el directorio de Git.

Si una versión concreta de un archivo está en el directorio de Git, se considera confirmada (committed). Si ha sufrido cambios desde que se obtuvo del repositorio, pero ha sido añadida al área de preparación, está preparada (staged). Y si ha sufrido cambios desde que se obtuvo del repositorio, pero no se ha preparado, está modificada (modified)

comando status

El comando para determinar qué archivos están en qué estado es el comando status. Si ejecuta este comando inmediatamente después de crear un repositorio, por ejemplo ejecutemos el comando del repositorio creado en proyecto1:

git status

git status

Esto significa que tienes un directorio de trabajo limpio, en otras palabras, que no hay archivos rastreados y modificados. Además, Git no encuentra archivos sin rastrear, de lo contrario aparecerían listados aquí. Finalmente, el comando te indica en cuál rama estás. Por ahora, la rama siempre será "master", que es la rama por defecto, más adelante veremos el concepto de ramas.

  • Procedamos a crear dos archivos con código fuente, por ejemplo en Python:

    git status

    En este caso VS Code está integrado con git y mediante el caracter "U" indica que el archivo está sin seguimiento.

    Si estuviéramos en otro editor de texto que no nos muestra la "U", podemos ejecutar el comando status y obtener el mismo resultado:

    git status
    

    git status

    Untracked files significa archivos sin seguimiento. De todos modos en VS Code es más fácil porque nos muestra el editor los archivos no seguidos con la letra "U".

  • Para comenzar a rastrear un archivo nuevo debemos utilizar el comando add:

    git add programa1.py
    

    Luego de esto el archivo pasa al área de preparación:

    git add

    Podemos ver que VS Code cambia el caracter 'U' por 'A', pero si estamos en otro editor que no nos muestre el estado del archivo, podemos consultarlo mediante el comando status:

    git status

    El archivo 'programa1.py' está listo para cuando queramos hacer una copia al repositorio.

  • Para confirmar el o los archivos preparados (en nuestro caso solo tenemos preparado el archivo programa1.py) debemos utilizar el comando commit.

    git commit -m "se añade el archivo programa1.py al proyecto"
    

    pasamos el parámetro -m (que indica que añadimos un mensaje) y el mensaje propiamente dicho entre comillas. Es importante este mensaje con una descripción de los cambios que estamos haciendo en nuestro proyecto (generalmente cada vez que añadimos funcionalidades a nuestra aplicación efectuamos un commit y con un mensaje indicamos dichas funcionalidades)

    git commit

    El editor de VS Code deja de mostrar la letra 'A', recordar que si estamos en otro editor podemos ejecutar el comando status:

    git status

    Como podemos ver solo queda el programa2.py sin seguimiento.

  • Procedamos a hacer el seguimiento del archivo programa2.py, igual que hicimos con el archivo1.py:

    git add programa2.py
    git commit -m "se añade el archivo programa2.py al proyecto"
    

    Es este momento tenemos totalmente sincronizados los archivos del directorio de trabajo y lo que almacena git.

  • Vamos a introducir una línea más en cada uno de los archivos de Python:

    git status

    Como vemos ahora el VS Code los marca con la letra 'M' de modificado, podemos también ejecutar el comando 'status' de git y ver el mismo resultado.

  • Los movemos ahora a los dos archivos al área de preparación (de una sola vez movemos todos los archivos con extensión py):

    git add *.py
    

    Con esto ya tenemos a los archivos en el área de preparación:

    git add

  • Finalmente los confirmamos para que quede la nueva versión del proyecto mediante el comando commit:

    git commit -m "se cargan las nuevas versiones de los archivos programa1.py y programa2.py"
    

    git commit

Hemos visto los pasos más comunes cuando tenemos que hacer el seguimiento de un proyecto sencillo, donde codificamos una serie de archivos, los vamos almacenando en el área de seguimiento, luego confirmamos los archivos del área de seguimiento mediante un commit.

Hay que tener en cuenta que cada vez que hacemos cambios o añadimos archivos al proyecto debemos ejecutar los comandos add y commit.