Com la majoria dels VCS, Git té la capacitat d’etiquetar punts específics a l’historial d’un repositori com a importants.
Normalment, la gent utilitza aquesta funcionalitat per marcar punts de llançament (v1.0, v2.0, etc.).
En aquesta secció, aprendràs com llistar les etiquetes existents, com crear i eliminar etiquetes, i quins són els diferents tipus d’etiquetes.
Llistar les etiquetes existents a Git és senzill.
Només has d’escriure git tag (amb l’opció -l o --list opcional):
$ git tag
v1.0
v2.0Aquesta comanda llista les etiquetes en ordre alfabètic; l’ordre en què es mostren no té cap importància real.
També podeu buscar etiquetes que coincideixin amb un patró particular. El repositori font de Git, per exemple, conté més de 500 etiquetes. Si només esteu interessat a veure la sèrie 1.8.5, podeu executar això:
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5|
Note
|
Llistant comodins d’etiquetes requereix l’opció
-l o --listSi només voleu la llista completa d’etiquetes, executar la comanda No obstant això, si esteu proporcionant un patró de comodins per coincidir amb noms d’etiquetes, l’ús de |
Git admet dos tipus d’etiquetes: lleugeres i anotades.
Una etiqueta lleugera és molt semblant a una branca que no canvia: és només un punter a un commit específic.
Les etiquetes anotades, però, s’emmagatzemen com a objectes complets a la base de dades de Git. Estan sumades; contenen el nom, correu electrònic i data de l’etiquetador; tenen un missatge d’etiquetatge; i poden ser signades i verificades amb GNU Privacy Guard (GPG). Generalment es recomana que creeu etiquetes anotades per tenir tota aquesta informació; però si voleu una etiqueta temporal o per alguna raó no voleu mantenir la resta de la informació, les etiquetes lleugeres també estan disponibles.
Crear una etiqueta anotada a Git és senzill.
La manera més fàcil és especificar -a quan executeu la comanda tag:
$ git tag -a v1.4 -m "la meva versió 1.4"
$ git tag
v0.1
v1.3
v1.4El -m especifica un missatge d’etiquetatge, que s’emmagatzema amb l’etiqueta.
Si no especifiqueu un missatge per a una etiqueta anotada, Git obre el vostre editor perquè pugueu escriure’l.
Podeu veure les dades de l’etiqueta juntament amb el commit que va ser etiquetat utilitzant la comanda git show:
$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:19:12 2014 -0700
la meva versió 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Canviar número de versióAixò mostra la informació de l’etiquetador, la data en què es va etiquetar el commit, i el missatge d’anotació abans de mostrar la informació del commit.
Una altra manera d’etiquetar commits és amb una etiqueta lleugera.
Això és bàsicament el checksum del commit emmagatzemat en un fitxer: no es manté cap altra informació.
Per crear una etiqueta lleugera, no proporcioneu cap de les opcions -a, -s, o -m, només proporcioneu un nom d’etiqueta:
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5Aquesta vegada, si executeu git show a l’etiqueta, no veureu la informació addicional de l’etiqueta.
La comanda només mostra el commit:
$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Canviar número de versióTambé podeu etiquetar commits després d’haver-los superat. Suposem que el vostre historial de commits sembla així:
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 Create write support
0d52aaab4479697da7686c15f77a3d64d9165190 One more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc Add commit function
4682c3261057305bdd616e23b64b0857d832627b Add todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a Create write support
9fceb02d0ae598e95dc970b74767f19372d61af8 Update rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc Commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a Update readmeAra, suposem que us vau oblidar d’etiquetar el projecte a v1.2, que estava al commit “Update rakefile”. Podeu afegir-lo després dels fets. Per etiquetar aquest commit, especifiqueu el checksum del commit (o part d’ell) al final de la comanda:
$ git tag -a v1.2 9fceb02Podeu veure que heu etiquetat el commit:
$ git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5
$ git show v1.2
tag v1.2
Tagger: Scott Chacon <schacon@gee-mail.com>
Date: Mon Feb 9 15:32:16 2009 -0800
versió 1.2
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon <mchacon@gee-mail.com>
Date: Sun Apr 27 20:43:35 2008 -0700
Actualitzar rakefile
...Per defecte, la comanda git push no transfereix etiquetes als servidors remots.
Haurà de transferir explícitament les etiquetes a un servidor compartit després de crear-les.
Aquest procés és igual que compartir branques remotes: podeu executar git push origin <tagname>.
$ git push origin v1.5
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@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5Si teniu moltes etiquetes que voleu enviar d’una vegada, també podeu utilitzar l’opció --tags a la comanda git push.
Això transferirà totes les vostres etiquetes al servidor remot que encara no hi són.
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lwAra, quan algú altre cloni o obtingui del vostre repositori, també obtindran totes les vostres etiquetes.
|
Note
|
git push envia els dos tipus d’etiquetes
|
Per eliminar una etiqueta al vostre repositori local, podeu utilitzar git tag -d <tagname>.
Per exemple, podríem eliminar la nostra etiqueta lleugera anterior de la següent manera:
$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)Noteu que això no elimina l’etiqueta de cap servidor remot. Hi ha dues variacions comunes per eliminar una etiqueta d’un servidor remot.
La primera variació és git push <remote> :refs/tags/<tagname>:
$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
- [deleted] v1.4-lwLa manera d’interpretar el anterior és llegir-lo com el valor nul abans dels dos punts que s’està enviant al nom de l’etiqueta remota, eliminant-la efectivament.
La segona (i més intuïtiva) manera d’eliminar una etiqueta remota és amb:
$ git push origin --delete <tagname>Si voleu veure les versions dels fitxers a les quals apunta una etiqueta, podeu fer un git checkout d’aquesta etiqueta, encara que això posarà el vostre repositori en estat “detached HEAD”, que té alguns efectes secundaris negatius:
$ git checkout v2.0.0
Note: switching to 'v2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout v2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... Add atlas.json and cover imageEn estat “detached HEAD”, si feu canvis i després creeu un commit, l’etiqueta romandrà la mateixa, però el vostre nou commit no pertanyerà a cap branca i serà inassolible, excepte pel hash exacte del commit. Així, si necessiteu fer canvis: suposem que esteu corregint un error en una versió més antiga, per exemple, generalment voldreu crear una branca:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'Si feu això i creeu un commit, la vostra branca version2 serà lleugerament diferent de la vostra etiqueta v2.0.0 ja que avançarà amb els vostres nous canvis, així que tingueu cura.