Salta el contingut
 

Etiquetes

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Etiquetes

En Git, cada commit s'identifica mitjançant un hash, un identificador alfanumèric que es genera quan es crea el commit. No obstant això, de vegades és útil identificar punts concrets de la història del repositori amb un nom, que és més fàcil de recordar i més significatiu que un hash.

Per aquesta raó, Git permet crear etiquetes (tags): noms que marquen punts concrets en la història del repositori. En projectes de desenvolupament, les etiquetes s'utilitzen normalment per a identificar les noves publicacions (releases), com ara v1.0 o v2.0, però es poden utilitzar per a qualsevol propòsit.

Etiqueta en un commit Etiqueta en un commit

Figura 1. Etiqueta en un commit.

Hi ha dos tipus d'etiquetes:

  • Etiqueta lleugera: referència amb nom que apunta a un commit.
  • Etiqueta anotada: objecte de Git que, a més, conté qui ha creat l'etiqueta, la data de creació i un missatge.
Preparació del repositori

El repositori dels exemples es prepara amb les ordres següents:

setup_tags.sh
#!/bin/bash

# Elimina el repositori si existeix
if [ -d ~/git_etiquetes ]; then
        rm -rf ~/git_etiquetes
fi

mkdir -p ~/git_etiquetes
cd ~/git_etiquetes
git init
git branch -m main
echo "# Etiquetes" > README.md
git add README.md
git commit -m "Commit inicial"
echo "Repositori d'exemple amb etiquetes" >> README.md
git commit -a -m "README: Descripció"
echo "" >> README.md
echo "## Tipus de etiquetes" >> README.md
git commit -a -m "README: Apartat tipus de etiquetes"
echo "Existeixen dos tipus de etiquetes: anotades i lleugeres" >> README.md
git commit -a -m "README: Descripció tipus de etiquetes"
git lga
jpuigcerver@fp:~ $ mkdir -p ~/git_etiquetes
jpuigcerver@fp:~ $ cd ~/git_etiquetes
jpuigcerver@fp:~/git_etiquetes $ git init
Initialized empty Git repository in ~/git_etiquetes/.git/
jpuigcerver@fp:~/git_etiquetes (main) $ git branch -m main
jpuigcerver@fp:~/git_etiquetes (main) $ echo "# Etiquetes" > README.md
jpuigcerver@fp:~/git_etiquetes (main) $ git add README.md
jpuigcerver@fp:~/git_etiquetes (main) $ git commit -m "Commit inicial"
[main (root-commit) 2dc09af] Commit inicial
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
jpuigcerver@fp:~/git_etiquetes (main) $ echo "Repositori d'exemple amb etiquetes" >> README.md
jpuigcerver@fp:~/git_etiquetes (main) $ git commit -a -m "README: Descripció"
[main da2c930] README: Descripció
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_etiquetes (main) $ echo "" >> README.md
jpuigcerver@fp:~/git_etiquetes (main) $ echo "## Tipus de etiquetes" >> README.md
jpuigcerver@fp:~/git_etiquetes (main) $ git commit -a -m "README: Apartat tipus de etiquetes"
[main 7909b46] README: Apartat tipus de etiquetes
 1 file changed, 2 insertions(+)
jpuigcerver@fp:~/git_etiquetes (main) $ echo "Existeixen dos tipus de etiquetes: anotades i lleugeres" >> README.md
jpuigcerver@fp:~/git_etiquetes (main) $ git commit -a -m "README: Descripció tipus de etiquetes"
[main e29a607] README: Descripció tipus de etiquetes
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_etiquetes (main) $ git lga
* e29a607 - (0 seconds ago) README: Descripció tipus de etiquetes - Joan Puigcerver (HEAD -> main)
* 7909b46 - (0 seconds ago) README: Apartat tipus de etiquetes - Joan Puigcerver
* da2c930 - (0 seconds ago) README: Descripció - Joan Puigcerver
* 2dc09af - (0 seconds ago) Commit inicial - Joan Puigcerver

Crea el nou repositori en una carpeta independent per evitar problemes amb els exemples i exercicis anteriors.

Numeració de versions

En projectes de desenvolupament, és habitual utilitzar un sistema de numeració per a identificar les diferents versions del programari.

Una bona pràctica és utilitzar la numeració semàntica, que permet saber de manera clara quin tipus de canvis s'han fet en cada versió. El sistema de numeració semàntica SemVer especifica el format següent:

MAJOR.MINOR.PATCH
  • MAJOR: s'incrementa quan es fan canvis incompatibles amb les versions anteriors.
  • MINOR: s'incrementa quan s'afigen funcionalitats compatibles amb les versions anteriors.
  • PATCH: s'incrementa quan es corregeixen errors de manera compatible amb les versions anteriors.
Exemple: Numeració de versions

La versió 1.2.0 indica:

  • 1: versió major.
  • 2: versió menor.
  • 0: versió de correcció d'errors.

Si en aquest punt s'afigen funcionalitats compatibles amb les versions anteriors, la versió següent és la 1.3.0. Després, si es corregeixen errors de manera compatible, la versió següent és la 1.3.1. En canvi, si es fan canvis incompatibles amb les versions anteriors, la versió següent és la 2.0.0.

Creació d'etiquetes

L'ordre git tag permet crear etiquetes lleugeres o anotades:

git tag [-a] <nom_etiqueta> [-m "<missatge>"] [<ref>]
  • [-a]: (opcional) crea una etiqueta anotada. Si no s'especifica, es crea una etiqueta lleugera.
  • <nom_etiqueta>: nom de l'etiqueta.
  • [-m "<missatge>"]: (opcional) missatge de l'etiqueta anotada. Si no s'especifica, s'obri un editor per a escriure'l.
  • [<ref>]: (opcional) referència del commit al qual s'associa l'etiqueta. Si no s'especifica, s'associa al commit actual (HEAD).
Exemple: Creació d'etiquetes anotades

Es creen les etiquetes anotades següents:

  • v1.0.0, en el primer commit, amb el missatge Primera versió: v1.0.0.
  • v2.0.0, en el commit README: Apartat tipus etiquetes, amb el missatge Versió: v2.0.0.
jpuigcerver@fp:~/git_etiquetes (main) $ git tag -a v1.0.0 -m "Primera versió: v1.0.0" 2dc09af
jpuigcerver@fp:~/git_etiquetes (main) $ git tag -a v2.0.0 -m "Versió: v2.0.0" 7909b46
jpuigcerver@fp:~/git_etiquetes (main) $ git lga
* e29a607 - (0 seconds ago) README: Descripció tipus de etiquetes - Joan Puigcerver (HEAD -> main)
* 7909b46 - (0 seconds ago) README: Apartat tipus de etiquetes - Joan Puigcerver (tag: v2.0.0)
* da2c930 - (0 seconds ago) README: Descripció - Joan Puigcerver
* 2dc09af - (0 seconds ago) Commit inicial - Joan Puigcerver (tag: v1.0.0)
Exemple: Creació d'etiquetes lleugeres

Es creen les etiquetes lleugeres següents:

  • v1.1.0, en el commit README: Descripció.
  • v2.1.0, en el commit actual.
jpuigcerver@fp:~/git_etiquetes (main) $ git tag v1.1.0 da2c930
jpuigcerver@fp:~/git_etiquetes (main) $ git tag v2.1.0
jpuigcerver@fp:~/git_etiquetes (main) $ git lga
* e29a607 - (0 seconds ago) README: Descripció tipus de etiquetes - Joan Puigcerver (HEAD -> main, tag: v2.1.0)
* 7909b46 - (0 seconds ago) README: Apartat tipus de etiquetes - Joan Puigcerver (tag: v2.0.0)
* da2c930 - (0 seconds ago) README: Descripció - Joan Puigcerver (tag: v1.1.0)
* 2dc09af - (0 seconds ago) Commit inicial - Joan Puigcerver (tag: v1.0.0)

Llistar etiquetes

L'ordre git tag sense arguments, o amb l'opció --list, mostra les etiquetes del repositori:

git tag [-l | --list] [<patró>]
  • [-l | --list]: (opcional) llista les etiquetes.
  • [<patró>]: (opcional) patró per a filtrar les etiquetes, que admet caràcters comodí (wildcards).
Exemple: Llistar etiquetes

Es mostren les etiquetes del repositori.

jpuigcerver@fp:~/git_etiquetes (main) $ git tag
v1.0.0
v1.1.0
v2.0.0
v2.1.0
Exemple: Llistar etiquetes amb un patró

Es mostren les etiquetes del repositori que comencen per v2..

jpuigcerver@fp:~/git_etiquetes (main) $ git tag -l "v2.*"
v2.0.0
v2.1.0

Consultar la informació d'una etiqueta

L'ordre git show permet consultar la informació d'una etiqueta:

git show <nom_etiqueta>
  • <nom_etiqueta>: nom de l'etiqueta que es vol consultar.

La informació que es mostra depén del tipus d'etiqueta. En les etiquetes lleugeres, es mostra la informació del commit associat. En les etiquetes anotades, a més, es mostra la persona que ha creat l'etiqueta, la data de creació i el missatge associat.

Documentació oficial: git show – Git

Exemple: Consultar la informació d'una etiqueta anotada

Es mostra la informació de l'etiqueta anotada v1.0.0.

jpuigcerver@fp:~/git_etiquetes (main) $ git show v1.0.0
tag v1.0.0
Tagger: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Sat Oct 19 20:51:43 2024 +0200

Primera versió: v1.0.0

commit 2dc09af5ba36816057c43a04f3d7f75cf3302bd0
Author: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Sat Oct 19 20:51:43 2024 +0200

    Commit inicial

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..81387f9
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# Etiquetes

S'observa la persona que ha creat l'etiqueta, la data de creació, el missatge i el commit associat.

Exemple: Consultar la informació d'una etiqueta lleugera

Es mostra la informació de l'etiqueta lleugera v1.1.0.

jpuigcerver@fp:~/git_etiquetes (main) $ git show v1.1.0
commit da2c93043a5ee159146b38a3f0d66ec6862312a6
Author: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Sat Oct 19 20:51:43 2024 +0200

    README: Descripció

diff --git a/README.md b/README.md
index 81387f9..199416c 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
 # Etiquetes
+Repositori d'exemple amb etiquetes

S'observa que, en aquest cas, només es mostra el commit associat.

Eliminar etiquetes

L'ordre git tag amb l'opció -d permet eliminar etiquetes:

git tag -d <nom_etiqueta>
  • <nom_etiqueta>: nom de l'etiqueta que es vol eliminar.
Exemple: Eliminar etiquetes

S'elimina l'etiqueta lleugera v1.1.0.

jpuigcerver@fp:~/git_etiquetes (main) $ git tag -d v1.1.0
Deleted tag 'v1.1.0' (was da2c930)
jpuigcerver@fp:~/git_etiquetes (main) $ git tag
v1.0.0
v2.0.0
v2.1.0
jpuigcerver@fp:~/git_etiquetes (main) $ git lga
* e29a607 - (0 seconds ago) README: Descripció tipus de etiquetes - Joan Puigcerver (HEAD -> main, tag: v2.1.0)
* 7909b46 - (0 seconds ago) README: Apartat tipus de etiquetes - Joan Puigcerver (tag: v2.0.0)
* da2c930 - (0 seconds ago) README: Descripció - Joan Puigcerver
* 2dc09af - (0 seconds ago) Commit inicial - Joan Puigcerver (tag: v1.0.0)

Etiquetes en el repositori remot

Les etiquetes no es publiquen automàticament amb git push. Per a publicar una etiqueta en el repositori remot, cal indicar-la explícitament:

git push origin <nom_etiqueta>

Per a publicar totes les etiquetes, s'utilitza l'opció --tags:

git push origin --tags

Per a eliminar una etiqueta del repositori remot, s'utilitza l'opció -d o --delete:

git push -d origin <nom_etiqueta>
Enllaç amb el repositori remot

S'enllaça el repositori local amb un repositori remot.

jpuigcerver@fp:~/git_etiquetes (main) $ git remote add origin git@github.com:joapuiib/cursgit_etiquetes.git
jpuigcerver@fp:~/git_etiquetes (main) $ git push -u origin main
branch 'main' set up to track 'origin/main'.
To github.com:joapuiib/cursgit_etiquetes.git
 * [new branch]      main -> main
jpuigcerver@fp:~/git_etiquetes (main) $ git lga
* e29a607 - (2 seconds ago) README: Descripció tipus de etiquetes - Joan Puigcerver (HEAD -> main, tag: v2.1.0, origin/main)
* 7909b46 - (2 seconds ago) README: Apartat tipus de etiquetes - Joan Puigcerver (tag: v2.0.0)
* da2c930 - (2 seconds ago) README: Descripció - Joan Puigcerver
* 2dc09af - (2 seconds ago) Commit inicial - Joan Puigcerver (tag: v1.0.0)

S'observa que les etiquetes creades en el repositori local no apareixen en el repositori remot.

Repositori remot sense etiquetes

Figura 1. Repositori remot sense etiquetes.

Per a fer aquesta secció, cal que crees i configures el teu propi repositori remot.

Exemple: Etiquetes en el repositori remot

Es publiquen totes les etiquetes en el repositori remot.

jpuigcerver@fp:~/git_etiquetes (main) $ git push origin --tags
To github.com:joapuiib/cursgit_etiquetes.git
 * [new tag]         v1.0.0 -> v1.0.0
 * [new tag]         v2.0.0 -> v2.0.0
 * [new tag]         v2.1.0 -> v2.1.0

S'observa que les etiquetes creades en el repositori local s'han publicat en el repositori remot.

Repositori remot amb etiquetes

Figura 2. Repositori remot amb etiquetes.

📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.