Cuando trabajamos con Git, la carpeta .git es el corazón interno de nuestro repositorio. Aunque normalmente no necesitamos entrar en ella, entender qué contiene nos ayuda a comprender mejor cómo funciona Git bajo el capó. Dentro de .git encontramos varias carpetas y archivos, entre ellos los objetos que almacenan commits y archivos, y los refs, que son referencias o punteros a esos objetos. Por ejemplo, las ramas y los tags son tipos de refs que apuntan a commits específicos.
Si exploramos la carpeta .git/refs/heads, veremos que cada archivo representa una rama y contiene simplemente una línea con el hash del commit al que apunta esa rama. Esto significa que las ramas no son más que punteros a commits concretos, y cada vez que hacemos un nuevo commit en esa rama, el puntero se actualiza para apuntar al commit más reciente.
Con los tags ocurre algo similar cuando hablamos de tags ligeros. Estos tags son punteros directos a un commit, igual que las ramas, pero con la diferencia de que no se mueven con nuevos commits. Son útiles para marcar puntos específicos en la historia del proyecto, pero no contienen información adicional.
Sin embargo, Git también nos ofrece otro tipo de tags llamados tags anotados. Estos no son solo punteros, sino que almacenan información extra, como un mensaje descriptivo, la fecha y hora de creación, y el autor del tag. Esto los hace ideales para marcar versiones oficiales o hitos importantes en el proyecto, ya que podemos documentar qué cambios incluye esa versión, qué bugs se han corregido o qué funcionalidades nuevas se han añadido.
Para crear un tag anotado, usamos el comando git tag -a seguido del nombre del tag. Al hacerlo, Git nos abrirá un editor para que escribamos un mensaje detallado sobre ese tag, similar a un mensaje de commit. Por ejemplo, podríamos crear un tag anotado para la versión 0.1.0 con un mensaje que describa los cambios y correcciones que incluye esa versión.
git tag -a 0.1.0
Al guardar el mensaje, el tag anotado queda registrado con toda esa información. Luego, si queremos ver los detalles de un tag anotado, podemos usar git show seguido del nombre del tag, y Git nos mostrará el mensaje, el autor, la fecha y el commit asociado, junto con el diff de los cambios si es relevante.
git show 0.1.0
Esto es especialmente útil en proyectos públicos o colaborativos, donde otros desarrolladores pueden consultar fácilmente qué incluye cada versión marcada con un tag anotado.
Cuando gestionamos muchos tags, puede ser complicado encontrar uno en particular. Por eso, Git permite listar y filtrar tags usando patrones con el parámetro -l. Por ejemplo, podemos listar todos los tags que comienzan con 0.1 usando:
git tag -l "0.1.*"
Esto nos ayuda a mantener una gestión eficiente de los tags, especialmente cuando seguimos un versionado semántico y tenemos múltiples versiones y correcciones.
En resumen, si queremos marcar versiones serias y documentadas, lo recomendable es usar tags anotados, ya que nos permiten añadir mensajes y metadatos que facilitan el seguimiento y la colaboración. Por otro lado, para marcas temporales o menos formales, los tags ligeros son más convenientes y consumen menos recursos, ya que son simplemente punteros sin información adicional. Así podemos mantener nuestro repositorio organizado y claro, aprovechando al máximo las funcionalidades que Git nos ofrece para el control de versiones.