Tags anotados

Los tags anotados son tags que se comportan como objetos. Pueden tener descripción, datos de autor, de fecha y hora, firma... en este vídeo te explico sus diferencias y cómo crearlos.

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.

Lista de reproducción
  1. 1
    ¿Qué es Git?
    4 minutos
  2. 2
    Cómo instalar Git
    9 minutos
  3. 3
    Creando tu primer commit
    9 minutos
  4. 4
    Qué es el staging area
    10 minutos
  5. 5
    Cómo deshacer modificaciones de archivos
    7 minutos
  6. 6
    Cómo deshacer un commit con reset
    7 minutos
  7. 7
    Cómo revertir un commit con revert
    7 minutos
  8. 8
    Introducción a las ramas
    6 minutos
  9. 9
    Cómo crear y modificar ramas
    6 minutos
  10. 10
    Commits bajo el workflow Feature Branch
    6 minutos
  11. 11
    Cómo fusionar ramas con merge
    6 minutos
  12. 12
    Fusiones conflictivas
    9 minutos
  13. 13
    Cómo construir alias
    7 minutos
  14. 14
    Más sobre conflictos
    9 minutos
  15. 15
    Etiquetas
    7 minutos
  16. 16
    Tags anotados
    9 minutos
  17. 17
    git stash: esconder cambios
    6 minutos
  18. 18
    Introducción a remotos
    5 minutos
  19. 19
    Pusheando a un remoto
    6 minutos
  20. 20
    Clonando y haciendo pull
    6 minutos
  21. 21
    Fetch y pull rebases
    8 minutos
  22. 22
    Rebase
    7 minutos
  23. 23
    Rebase interactivo
    6 minutos
  24. 24
    Master, main y otros nombres de rama
    9 minutos
  25. 25
    git switch
    9 minutos
  26. 26
    git-restore
    10 minutos
  27. 27
    git-grep
    11 minutos
  28. 28
    Gitignore
    11 minutos
  29. 29
    El flag --patch
    9 minutos
  30. 30
    git-apply y parches en bruto (advanced)
    9 minutos
  31. 31
    Merge octopus (advanced)
    9 minutos
  32. 32
    Conventional commits
    12 minutos
  33. 33
    Merge and squash (GitLab / GitHub...)
    6 minutos
  34. 34
    git merge --squash
    7 minutos
  35. 35
    git-bisect
    8 minutos
  36. 36
    git-blame
    6 minutos
  37. 37
    git-reflog
    10 minutos
  38. 38
    Git para la Bash
    11 minutos
  39. 39
    Submódulos (parte 1)
    7 minutos
  40. 40
    Submódulos (parte 2)
    10 minutos
  41. 41
    Otros clientes Git (último episodio)
    9 minutos