¿Alguna vez has tenido que navegar por el historial de tu repositorio Git buscando ese commit crucial para una versión específica del proyecto? ¿Alguna vez quisiste marcar un commit importante para no perderlo de vista? Aquí es donde las etiquetas de Git entran en juego: las etiquetas permiten marcar puntos significativos en tu historial de commits, facilitando la identificación de versiones importantes y simplificando el manejo del proyecto. En este artículo, exploraremos cómo las etiquetas pueden transformar tu flujo de trabajo en Git y mantener tu proyecto organizado y eficiente.

Introducción a las Etiquetas en Git

En el mundo del desarrollo de software, mantener un registro claro y accesible de los hitos importantes es crucial. Git, como uno de los sistemas de control de versiones más populares, ofrece una solución elegante a este problema: las etiquetas.

Las etiquetas en Git son referencias permanentes a puntos específicos en el historial del repositorio. A diferencia de los commits, que pueden moverse a medida que se hace git rebase y se reordena la historia del proyecto, las etiquetas son como marcadores permanentes que puedes usar para señalar versiones importantes, lanzamientos, o cualquier otro evento significativo en el desarrollo.

Las etiquetas son especialmente útiles para:

  • Identificar versiones de lanzamiento: Puedes marcar la versión 1.0, 2.0, etc., y volver a ellas fácilmente.
  • Documentar hitos: Permiten una rápida referencia a momentos importantes del desarrollo, como la adición de una nueva funcionalidad o la solución de un bug crítico.
  • Simplificar el despliegue: Facilitan la integración con herramientas de despliegue continuo, permitiendo que los sistemas automáticos identifiquen y desplieguen versiones específicas del software.

Diferencias entre las etiquetas de git y las ramas

Las ramas en Git son esencialmente una serie de commits. Permiten trabajar en paralelo en diferentes características o correcciones sin afectar la rama principal (generalmente main o master). Una rama nueva comienza en un commit específico y puede evolucionar de forma independiente.

Sin embargo no deben confundirse las ramas y las etiquetas de git: cada cosa está para lo que está, que decimos en España. Mientras que las ramas en git son “colecciones” de commits, las etiquetas en git permiten referenciar un commit en concreto: marcarlo de forma inequívoca para poder encontrarlo de forma más rápida. Así mismo, mientras que las ramas permiten fusionarse con otras, una etiqueta en git es fija e inmutable además de apuntar siempre al mismo commit.

Tipos de Etiquetas en Git: Cuándo Utilizarlas, Ventajas y Desventajas

Ya tenemos claro que las etiquetas de git, o git tag en inglés, apuntan a un commit concreto y permiten encontrarlo de forma rápida. Sin embargo, nos toca estudiar los tipos de etiquetas que git nos proporciona. Git ofrece dos tipos principales de etiquetas: ligeras y anotadas. Cada tipo tiene sus propias características y casos de uso, así como ventajas y desventajas específicas.

Etiquetas Ligeras en git

Las etiquetas ligeras son simplemente referencias que apuntan a un commit específico. No contienen información adicional más allá del puntero al commit. Es algo así como ponerle un sobrenombre a un commit, de forma que pueda encontrar de forma más rápida.

Su ventaja principal es que son simples y ligeras: es decir, son fáciles de crear y no ocupan mucho espacio en el resositorio, ya que simplemente son “como accesos directos” a un commit. Sin embargo, la información que contienen es limitada, ya que, como accesos directos, no contienen metadatos adicionales.

Son tremendamente útiles como marcadores rápidos que no requieren información adicional o para hacer referencias de ámbito interno: tal vez algún enlace dentro de tu organización o quieras recordar que en ese commit pasó algo.

Pongamos un ejemplo,

git tag v1.1.2

En este ejemplo, estamos creando una etiqueta ligera llamada v1.1.2 dentro de nuestro repositorio. De esta forma, cuando listemos las etiquetas, encontraremos rápidamente este acceso al commit. No tenemos más información adicional, solo un nombre y un commit.

Etiquetas Anotadas

Hay ocasiones en las que las etiquetas ligeras no son suficientes para marcar el commit. En esos casos, git pone a nuestra disposición las etiquetas anotadas. Las etiquetas anotadas son objetos completos en Git que almacenan metadata adicional como el nombre del autor, la fecha, y un mensaje de anotación.

La ventaja principal de las etiquetas anotadas son que permiten alojar más información que las ligeras, como te comentaba anteriormente. Permiten saber quién la hizo, cuándo y un mensaje adicional, como el que adjuntamos en cada commit, comentando qué contenido o qué cambios ha habido. La desventaja que tienen es que son ligeramente más complejas de crear, ya que hacen falta algunos pasos o argumentos más para crearlas. También influye que el tamaño de una etiqueta anotada es mayor que una ligera, ya que contiene más metainformación. Esto no suele ser un problema, pero debemos tenerlo en cuenta.

Son tremendamente útiles para lanzamientos oficiales; es decir, usar las etiquetas anotadas como sistema de referencia para sistemas de despliegue. Las etiquetas ligeras son más de uso “para andar por casa” mientras que las anotadas son más estables, robustas y su uso está recomendado como referencia oficial.

Para crear una etiqueta anotada, solo debemos lanzar este comando:

git tag -a v1.0 -m "Versión 1.0, lanzamiento inicial"

Esto creará una etiqueta anotada, en este caso llamada “v1.0”. Así mismo, incluirá la fecha en la que fue creada y, así mismo, incluirá un mensaje o comentario: en este caso “Versión 1.0, lanzamiento inicial”.

Comparación de Etiquetas Ligeras y Anotadas

CaracterísticaEtiquetas LigerasEtiquetas Anotadas
InformaciónSolo referencia al commitAutor, fecha, mensaje de anotación
Uso recomendadoMarcadores rápidos y referencias rápidasLanzamientos oficiales y documentación
ComplejidadBajaAlta
Espacio ocupadoMínimoMayor

Listar y filtrar etiquetas

Una vez sabemos qué son las etiquetas ligeras y las etiquetas anotadas, qué ventajas tienen y cuándo es mejor cada una, podemos trabajar con ellas. La primera operación más común es listar las etiquetas que existen en nuestro repositorio. Esto nos permitirá ver todas las etiquetas que existen.

git tag

Este comando nos devolverá una lista de todas las etiquetas que tenemos en nuestro repositorio. Recuerda que lo que listará será el nombre; es decir, “v1.1.2” o “v1.0” si hubieramos creado las etiquetas que te comenté antes.

Cuando el proyecto es grande, la cantidad de etiquetas que están presentes aumenta mucho, hasta tal punto que resulta inviable la opción de buscarlas de forma manual. Para ello, Git pone a nuestra disposición la opción de filtrar el nombre de la etiqueta:

git tag -l "v1*"

Este ejemplo nos devolverá todas las etiquetas cuyo nombre comience por V1…

Enviar las etiquetas al repositorio

Acabamos de crear una o más etiquetas en nuestro repositorio para poder etiquetas los lanzamientos de nuevas versiones o, tal vez, algunos commit que queremos tener bien localizados en el futuro, pero, y ahora, ¿qué hacemos? Recuerda que las operaciones que haces en tu ordenador con git solo afectan a tu copia del repositorio; es decir, sólo tú las tienes disponibles. Llegados a este punto, tendrás que enviar o compartir las etiquetas con tu git remoto centralizado, igual que haces con los commit con git push.

Cuando creamos una rama y/o hacemos una serie de commit, tenemos que compartirlo con nuestro server de git con git push origin. Con las etiquetas, tanto las ligeras como las anotadas, pasa exactamente lo mismo: tenemos que enviarlas al origen remoto.

Por defecto, git push no envía las etiquetas al origen salvo que se lo indiques explícitamente. Así que, tienes dos opciones, enviar una etiqueta en concreto o bien, enviar todas las etiquetas. La primera opción es útil cuando solo quieres enviar una etiqueta al servidor remoto; la segunda es útil para sincronizar todas las etiquetas que tengas en tu máquina (y que el servidor no tenga)

# git push origin nombre-de-la-etiqueta
git push origin v1.2

# Enviar todas las etiquetas
git push origin --tags

Hacer checkout sobre una etiqueta

Git mantiene almacenados todos los cambios que realizas sobre tu proyecto, commit a commit, lo que significa que puedes volver a como estaba el proyecto en un momento dado. Cuando digo volver a cómo estaba, significa que puedes “restaurar” los ficheros de forma temporal (cuando necesitas comprobar algo de forma puntual y luego volver al presente) o de forma permanente (y eliminar todo lo que hayas adelantado para siempre).

git checkout v1.2

Desde este momento, puedes ver el proyecto tal y como estaba en el momento de crear la etiqueta. Desde este momento, Git entrará en modo detached HEAD.

Cuando haces un checkout a una etiqueta, un commit específico o un punto en el historial que no es una rama, entras en un estado conocido como “detached HEAD”. En este estado, Git apunta directamente al commit especificado en lugar de una rama. Esto significa que cualquier cambio que hagas no estará asociado a ninguna rama actual.

Este modo tiene implicaciones:

  1. Cambios temporales: Los commits que realices no estarán ligados a ninguna rama a menos que crees una nueva rama desde ese punto.
  2. Perdida de cambios: Si cambias de rama sin guardar esos commits en una nueva rama, perderás esos cambios.

Conclusiones sobre las etiquetas de git

Tanto las etiquetas ligeras como las anotadas tienen su lugar en la gestión de proyectos con Git. Las etiquetas ligeras son ideales para referencias rápidas y uso interno, mientras que las anotadas son indispensables para lanzamientos formales y documentación detallada. Conocer cuándo y cómo usar cada tipo de etiqueta puede mejorar significativamente la organización y claridad de tu historial de commits en Git.

Recuerda que esto es un pequeño resumen y guía rápida sobre las etiquetas de git. Para más detalles sobre cómo utilizar las etiquetas en Git, visita la documentación oficial

¡Que tengas un feliz coding!