Etiquetado

En este documento, se tratará el concepto de Git del etiquetado y el comando git tag. Las etiquetas son referencias que apuntan a puntos específicos en el historial de Git. Generalmente, el etiquetado se usa para capturar un punto en el historial que se utiliza para una publicación de versión marcada (por ejemplo, v1.0.1). Una etiqueta es como una rama que no cambia. A diferencia de las ramas, las etiquetas, tras crearse, no tienen más historial de confirmaciones. Si quieres obtener más información sobre las ramas, visita la página de git branch. En este documento, se explicarán los diferentes tipos de etiquetas, cómo crearlas, cómo elaborar una lista con todas ellas, cómo eliminarlas, cómo compartirlas, etc.

Creación de una etiqueta

Para crear una nueva etiqueta, ejecuta el siguiente comando:

 git tag  

Sustituye con un identificador semántico del estado del repositorio en el momento en el que se está creando la etiqueta. Un patrón habitual es utilizar números de versión como git tag v1.4. Git soporta dos tipos diferentes de etiquetas: etiquetas anotadas y ligeras. En el ejemplo anterior, se ha creado una etiqueta ligera. Las etiquetas ligeras y las anotadas difieren en la cantidad de metadatos adjuntos que almacenan. Una práctica recomendada es considerar las etiquetas anotadas como públicas y las etiquetas ligeras como privadas. Las etiquetas anotadas almacenan metadatos adicionales como los siguientes: el nombre de la persona que etiqueta, su correo electrónico y la fecha. Son datos importantes para una publicación pública. Las etiquetas ligeras son básicamente "marcadores" de una confirmación; son solo un nombre y un puntero a una confirmación, útiles para crear enlaces rápidos a las confirmaciones relevantes.

Etiquetas anotadas

Las etiquetas anotadas se almacenan como objetos completos en la base de datos de Git. Para que quede claro, almacenan metadatos adicionales como los siguientes: el nombre de la persona que etiqueta, su correo electrónico y la fecha. Al igual que las confirmaciones y los mensajes de las confirmaciones, las etiquetas anotadas tienen un mensaje de etiquetado. Además, por seguridad, las etiquetas anotadas pueden firmarse y verificarse con GNU Privacy Guard (GPG). La práctica recomendada para el etiquetado de git es dar preferencia a las etiquetas anotadas por encima de las ligeras, para poder tener todos los metadatos asociados.

 git tag -a v1.4 

Al ejecutar este comando, se creará una nueva etiqueta anotada identificada con v1.4. A continuación, el comando abrirá el editor de texto predeterminado configurado para solicitar que se introduzcan más metadatos.

 git tag -a v1.4 -m "mi versión 1.4" 

Ejecutar este comando es similar a la invocación anterior; sin embargo, esta versión del comando incluye la opción -m y un mensaje. Se trata de un método útil similar a git commit -m que creará inmediatamente una nueva etiqueta y renunciará a abrir el editor de texto local a favor de guardar el mensaje que se pasa con la opción -m.

Etiquetas ligeras

 git tag v1.4-lw 

Al ejecutar este comando, se crea una etiqueta ligera identificada como v1.4-lw. Las etiquetas ligeras se crean con la ausencia de las opciones -a, -s o -m. Las etiquetas ligeras crean una nueva suma de verificación de etiquetas y la almacenan en el directorio .git/ del repositorio del proyecto.

Listado de etiquetas

Para elaborar una lista de las etiquetas almacenadas en un repositorio, ejecuta lo siguiente:

 git tag 

El resultado será una lista de etiquetas:

 v0.10.0 v0.10.0-rc1 v0.11.0 v0.11.0-rc1 v0.11.1 v0.11.2 v0.12.0 v0.12.0-rc1 v0.12.1 v0.12.2 v0.13.0 v0.13.0-rc1 v0.13.0-rc2 

Para perfeccionar la lista de etiquetas, se puede pasar la opción -l con una expresión de comodín:

 $ git tag -l *-rc* v0.10.0-rc1 v0.11.0-rc1 v0.12.0-rc1 v0.13.0-rc1 v0.13.0-rc2 v0.14.0-rc1 v0.9.0-rc1 v15.0.0-rc.1 v15.0.0-rc.2 v15.4.0-rc.3 

En este ejemplo anterior, se utiliza la opción -l y una expresión comodín de -rc que devuelve una lista de todas las etiquetas marcadas con un prefijo -rc, tradicionalmente utilizada para identificar candidatos de publicación.

Etiquetado de confirmaciones antiguas

Los ejemplos de etiquetado anteriores han demostrado operaciones en las confirmaciones implícitas. De manera predeterminada, git tag creará una etiqueta en la confirmación a la que HEAD hace referencia. Otra alternativa es que git tag puede pasarse como una referencia a una confirmación específica. Esto etiquetará la confirmación pasada en vez de establecer como predeterminado HEAD. Para recopilar una lista de confirmaciones más antiguas, ejecuta el comando git log.

 $ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature' a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment' 

Al ejecutar git log, aparecerá una lista de confirmaciones. En este ejemplo, escogeremos la primera confirmación, Merge branch 'feature', para la nueva etiqueta. Tendremos que hacer referencia al hash SHA de la confirmación para pasarla a Git:

 git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6 

Al ejecutar la invocación de git tag anterior, se creará una nueva confirmación anotada identificada como v1.2 para la confirmación que hemos seleccionado en el ejemplo de git log anterior.

Reetiquetado y sustitución de etiquetas antiguas

Si intentas crear una etiqueta con el mismo identificador que una etiqueta existente, Git lanzará un error como el siguiente:

 fatal: tag 'v0.4' already exists 

Asimismo, si intentas etiquetar una confirmación más antigua con un identificador de etiqueta existente, Git lanzará el mismo error.

En el caso de que tengas que actualizar una etiqueta existente, debe utilizarse la opción -f (--force).

 git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6 

Al ejecutar el comando anterior, se asignará la confirmación 15027957951b64cf874c3557a0f3547bd83b3ff6 con el identificador de etiquetas v1.4. Sobrescribirá cualquier contenido existente de la etiqueta v1.4.

Uso compartido: envío de etiquetas a remoto

El uso compartido de etiquetas es similar a enviar ramas. De manera predeterminada, git push no enviará etiquetas. Las etiquetas se tienen que pasar explícitamente a git push.

 $ git push origin v1.4 Counting objects: 14, done. Delta compression using up to 8 threads. Compressing objects: 100% (12/12), done. Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done. Total 14 (delta 3), reused 0 (delta 0) To git@bitbucket.com:atlasbro/gittagdocs.git * [new tag] v1.4 -> v1.4 

Para enviar múltiples etiquetas al mismo tiempo, pasa la opción --tags al comando git push. Cuando otro usuario clone un repositorio o incorpore cambios en él, recibirán las nuevas etiquetas.

Cambio de etiquetas

Puedes ver el estado de un repositorio en una etiqueta utilizando el comando git checkout.

 git checkout v1.4 

El comando anterior cambiará la etiqueta v1.4. Esto pone el repositorio en un estado de HEAD desasociado. Significa que cualquier cambio que se haga no actualizará la etiqueta. Se creará una nueva confirmación desasociada. Esta nueva confirmación desasociada no formará parte de ninguna rama y solo se podrá acceder a ella directamente mediante el hash SHA de la confirmación. Por lo tanto, es una práctica recomendada crear una nueva rama cada vez que hagas cambios en un estado de HEAD desasociado.

Eliminación de etiquetas

La eliminación de etiquetas es una operación sencilla. Al pasar la opción -d y un identificador de etiqueta de git tag, se eliminará la etiqueta identificada.

 $ git tag v1 v2 v3 $ git tag -d v1 $ git tag v2 v3 

En este ejemplo, se ejecuta git tag para mostrar una lista de etiquetas que muestra v1, v2 y v3. A continuación, se ejecuta git tag -d v1, que elimina la etiqueta v1.

Resumen

En resumen, el etiquetado es un mecanismo adicional utilizado para crear una instantánea de un repositorio de Git. Tradicionalmente, se utiliza el etiquetado para crear etiquetas identificativas con un número de versión semántico que corresponden con ciclos de publicación de software. El comando git tag es el impulsor principal de una etiqueta: creación, modificación y eliminación. Hay dos tipos de etiquetas: anotadas y ligeras. Por lo general, las etiquetas anotadas son la práctica recomendada, ya que almacenan metadatos valiosos adicionales sobre la etiqueta. En este documento, también se ha hablado de los comandos de Git siguientes: git push y git checkout. Visita sus páginas correspondientes para descubrir su uso más exhaustivo.

¿Listo para aprender a usar Git?

Prueba este tutorial interactivo.

Comienza ahora