Cuando se trabaja en Git u otros sistemas de control de versiones, el concepto de “guardar” es un proceso con más matices que el de guardar en un procesador de texto u otras aplicaciones convencionales de edición de archivos. La expresión tradicional de software de “guardar” equivale al término de Git “confirmar”. Una confirmación es lo mismo que el guardado en Git. El guardado convencional debe considerarse como una operación de un sistema de archivos que se emplea para sobrescribir un archivo existente o escribir uno nuevo. De manera alternativa, la confirmación de Git es una operación que actúa sobre una colección de archivos y directorios.

El proceso de guardar los cambios en Git o en SVN también es diferente. Las confirmaciones o “registros” de SVN son operaciones que realizan un envío remoto a un servidor centralizado. Esto significa que las confirmaciones de SVN precisan de acceso a Internet para guardar por completo los cambios de los proyectos. Las confirmaciones de Git pueden capturarse y crearse de manera local, y después enviarse a un servidor remoto según sea necesario mediante el comando git push -u origin master. La diferencia fundamental entre los dos métodos radica en el diseño de las arquitecturas. Git es un modelo de aplicaciones distribuidas, mientras que SVN tiene un modelo centralizado. Las aplicaciones distribuidas son, por lo general, más robustas, ya que no presentan un único punto de fallo como un servidor centralizado.

Los comandos git add, git status y git commit se usan en combinación para guardar una instantánea del estado de un proyecto de Git.

Git tiene un mecanismo de guardado adicional llamado “stash”. El stash es un área de almacenamiento efímera para los cambios que no están listos para confirmarse. El stash actúa en el directorio de trabajo, el primero de los tres árboles, y presenta numerosas opciones de uso. Para obtener más información, visita la página sobre git stash.

Los repositorios de Git pueden configurarse para ignorar archivos o directorios específicos. De este modo, se evitará que Git guarde los cambios en el contenido ignorado. Git cuenta con varios métodos de configuración para gestionar la lista de elementos ignorados. Esta configuración de Git se analiza con más detalle en la página sobre git ignore.

git add

El comando git add añade un cambio del directorio de trabajo en el entorno de ensayo. Indica a Git que quieres incluir actualizaciones en un archivo concreto en la próxima confirmación. Sin embargo, git add no afecta al repositorio de manera significativa: en realidad, los cambios no se registran hasta que ejecutas git commit.

Junto con estos comandos, también necesitarás git status para ver el estado del directorio de trabajo y el entorno de ensayo.

Funcionamiento

Los comandos git add y git commit componen el flujo de trabajo fundamental de Git. Estos son los dos comandos que todos los usuarios de Git deben conocer, con independencia del modelo de colaboración de su equipo. Constituyen el medio para registrar las versiones de un proyecto en el historial del repositorio.

El desarrollo de un proyecto gira en torno al patrón básico de edición/preparación/confirmación. Primero, editas tus archivos en el directorio de trabajo. Cuando lo tienes todo listo para guardar una copia del estado del proyecto, preparas los cambios con git add. Una vez satisfecho con la instantánea preparada, la confirmas en el historial del proyecto con git commit. El comando git reset se usa para deshacer una confirmación o una instantánea preparada.

Además de git add y git commit, resulta esencial un tercer comando (git push) para lograr un flujo de trabajo colaborativo completo de Git. El comando git push se emplea para enviar los cambios confirmados a repositorios remotos para colaborar. Esto permite a otros miembros del equipo acceder a un conjunto de cambios guardados.

Git Tutorial: git add Snapshot

El comando git add no debe confundirse con svn add, que añade un archivo al repositorio. En su lugar, git add actúa en el nivel más abstracto de los cambios. Esto significa que git add debe llamarse cada vez que se modifica un archivo, mientras que svn add solo tiene que llamarse una vez por cada archivo. Puede parecer redundante, pero este flujo de trabajo facilita en gran medida la organización de los proyectos.

Entorno de ensayo

La función principal del comando git add consiste en pasar los cambios pendientes del directorio de trabajo al área de git staging. El entorno de ensayo es una de las características más exclusivas de Git, y puede llevar un tiempo entenderlo si vienes de un entorno de SVN (o incluso Mercurial). Resulta útil pensar en él como un intermediario entre el directorio de trabajo y el historial del proyecto. El entorno de ensayo se considera como uno de los “tres árboles” de Git, junto con el directorio de trabajo y el historial de confirmaciones.

En lugar de confirmar todos los cambios realizados desde la última confirmación, el entorno de ensayo te permite agrupar los cambios relacionados en instantáneas con un enfoque muy claro antes de confirmarlos en el historial del proyecto. De este modo, puedes hacer todo tipo de cambios en archivos sin relación, volver atrás y dividirlos en confirmaciones lógicas mediante la adición de cambios relacionados en el entorno de ensayo, y confirmarlos de manera fraccionada. Como en cualquier sistema de control de revisiones, es fundamental crear confirmaciones atómicas para que resulte sencillo localizar los errores y revertir los cambios minimizando el impacto en el resto del proyecto.

Opciones comunes

git add <file>

Prepara todos los cambios de <file> para la siguiente confirmación.

git add <directory>

Prepara todos los cambios de <directory> para la siguiente confirmación.

git add -p

Inicia una sesión de entorno de ensayo interactiva que te permite elegir las partes de un archivo que quieres añadir a la siguiente confirmación. Se te presentarán una serie de cambios y se te solicitará un comando. Utiliza y para preparar el conjunto, n para ignorarlo, s para dividirlo en conjuntos más pequeños, e para editarlo manualmente y q para salir.

Ejemplos

Al comenzar un nuevo proyecto, git add desempeña la misma función que svn import. Para crear una confirmación inicial del directorio actual, usa los siguientes dos comandos:

git add .
git commit

Una vez que tengas tu proyecto en marcha, puedes añadir nuevos archivos pasando la ruta a git add:

git add hello.py
git commit

Los comandos anteriores también pueden usarse para registrar los cambios en los archivos existentes. Una vez más, Git no distingue entre los cambios del entorno de ensayo en los nuevos archivos y los cambios de los archivos que ya se han añadido al repositorio.

Resumen

En la revisión, git add es el primer comando de una cadena de operaciones que ordena a Git que “guarde” una instantánea del estado del proyecto en el historial de confirmaciones. Al usarse por sí solo, git add pasará los cambios pendientes del directorio de trabajo al entorno de ensayo. El comando git status se emplea para examinar el estado del repositorio y permite confirmar una promoción de git add. El comando git reset se utiliza para deshacer la acción de git add. El comando git commit se usa para confirmar una instantánea del directorio del entorno de ensayo en el historial de confirmaciones de los repositorios.

¿Listo para aprender a usar Git?

Prueba este tutorial interactivo.

Comienza ahora