Salta el contingut
 

Etiquetes

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Etiquetes

En Git, tots els commits estan identificats mitjançant un hash, que es un identificador alfanumèric que es genera quan creem un commit. No obstant això, de vegades és útil identificar punts concrets (commits) en l'estat del nostre repositori amb un nom és més fàcil i significatiu que un hash.

Per aquesta raó, Git ens permet crear etiquetes (tags) per a marcar punts concrets en la història del nostre repositori.

Normalment, en projectes de desenvolupament, les etiquetes s'utilitzen per identificar noves publicacions (releases): v1.0, v2.0, ..., però poden ser utilitzades per qualsevol propòsit.

Hi ha dos tipus d'etiquetes, les etiquetes lleugeres i les etiquetes anotades.

  • Una etiqueta lleugera és una referència alfanumèrica que s'especifica a un commit.
  • Una etiqueta anotada és un objecte de Git que, a més, conté qui ha creat l'etiqueta, la data de creació i un missatge.

Documentació

Preparació repositori
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

Numeració de versions

En projectes de desenvolupament, és comú utilitzar un sistema de numeració de versions per identificar les diferents versions del software.

Una bona pràctica és utilitzar el sistema de numeració semàntica, que permet identificar de forma clara i senzilla els canvis que s'han realitzat en cada versió.

El sistema de numeració semàntica SemVer especifica el següent format per a les versions:

MAJOR.MINOR.PATCH
  1. MAJOR: Cal incrementar aquest comptador quan es realitzen canvis incompatibles amb versions anteriors.
  2. MINOR: Cal incrementar aquest comptador quan s'afegeixen funcionalitats compatibles amb versions anteriors.
  3. PATCH: Cal incrementar aquest comptador quan es realitzen correccions de bugs compatibles amb versions anteriors.
Exemple: Numeració de versions

La versió 1.2.0 indica:

  • 1: Versió major.
  • 2: Versió menor.
  • 0: Versió de correcció de bugs.

Si en aquest punt es realitza una addició de funcionalitats compatibles amb versions anteriors, la versió següent seria 1.3.0.

Després, si es realitzen correccions de bugs compatibles amb versions anteriors, la versió següent seria 1.3.1.

En canvi, si es realitzen canvis incompatibles amb versions anteriors, la versió següent seria 2.0.0.

Creació d'etiquetes

L'ordre git tag ens permet crear etiquetes lleugeres o anotades.

La sintaxi és la següent:

git tag [-a] <nom_etiqueta> [-m "missatge"] [<ref>]

  • -a: Crea una etiqueta anotada. Si no s'especifica, es crea una etiqueta lleugera.
  • <nom_etiqueta>: Nom de l'etiqueta.
  • -m "missatge": Missatge de l'etiqueta anotada. Si no s'especifica, s'obrirà un editor per escriure el missatge.
  • <ref>: Referència al commit al qual volem associar l'etiqueta. Si no s'especifica, es crea en el commit actual (HEAD).

Documentació

Documentació oficial sobre etiquetes.

Exemple: Creació d'etiqueta anotada

S'han creat la etiquetes anotades:

  • 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'etiqueta lleugera

S'han creat la etiquetes lleugeres:

  • 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 ens permet llistar les etiquetes del nostre repositori.

git tag [-l | --list] [<patró>]

Documentació

Apartat de la documentació oficial sobre tag --list.

Exemple: Llistar etiquetes

Mostrem les etiquetes del nostre repositori.

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

Mostrem les etiquetes del nostre repositori que comencen per v2..

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

Consultar informació d'una etiqueta

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

git show <nom_etiqueta>
  • En cas de les etiquetes lleugeres, es mostrarà la informació del commit associat.
  • En cas de les etiquetes anotades, a més, es mostrarà la persona que ha creat l'etiqueta, la data de creació i el missatge associat.
Exemple: Consultar informació d'una etiqueta anotada

Mostrem la informació de l'etiqueta anotada v1.0.0.

Podem observar:

  • La persona que ha creat l'etiqueta.
  • La data de creació.
  • El missatge associat.
  • El commit associat.
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
Exemple: Consultar informació d'una etiqueta lleugera

Mostrem la informació de l'etiqueta lleugera v1.1.0.

En aquest cas, sols podem veure el commit associat.

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

Eliminar etiquetes

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

git tag -d <nom_etiqueta>
Exemple: Eliminar etiquetes

Eliminem 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

Per publicar una etiqueta en el repositori remot, utilitzarem l'ordre git push:

git push origin <nom_etiqueta>

Si desitgem publicar totes les etiquetes, utilitzarem l'opció --tags:

git push origin --tags

En cas de voler eliminar una etiqueta del repositori remot, utilitzarem l'opció --delete:

git push [-d | --delete] origin <nom_etiqueta>
Enllaç amb el 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)

Podem veure que les etiquetes creades en el nostre repositori local no estan en el repositori remot.

Repositori remot sense etiquetes

Exemple: Etiquetes en el repositori remot

Publiquem 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

Vegem que les etiquetes creades en el nostre repositori local s'han publicat en el repositori remot.

Repositori remot amb etiquetes

Comentaris