Cosa sono i tag Git?
I tag Git sono puntatori a determinati commit. Sono come segnalibri. Puoi usare qualsiasi tipo di convenzione tu voglia creare tag. Ma la maggior parte dei team di sviluppo usa numeri di versione come v1.0.1 o v.1.1-a1 per creare tag.
Creazione di tag
Ci sono due tipi di tag in Git:
- Tag leggeri
- Tag annotati
Tag leggeri
I tag leggeri sono facili da creare. Puoi semplicemente usare la seguente riga di comando:
$git tagQuesti tag sono memorizzati nel .git del tuo repository di lavoro.
Creiamo alcuni tag Git leggeri:
$git tag v1.0.1Rilascio tag $git-20190401
Nel primo caso abbiamo creato un tag con “v1.0.1". Nel secondo caso abbiamo creato un tag con “Release-20190401”. I tag leggeri non restituiscono alcun valore. Inoltre, è importante sottolineare che poiché questi due tag sono stati eseguiti uno contro l'altro, puntano allo stesso commit.
Tag annotati
I tag annotati ti consentono di memorizzare più informazioni. Puoi utilizzare l'opzione "-a" per creare questi tag:
$git tag -aProviamo a creare un tag annotato:
git tag -a v1.0.2Apparirà una finestra di testo per inserire un commento che dovrebbe assomigliare a questo:
## Scrivi un messaggio per il tag:
# v1.0.2
# Le righe che iniziano con '#' verranno ignorate.
Inserisci un commento e salvalo. Quindi, ora il tuo tag v1.0.2 viene salvato con un commento. In alternativa, puoi inserire direttamente il commento nella riga di comando in questo modo:
git tag -a v1.0.3 -m "La mia versione 1.0.3"Trovare i tag nel tuo codice
Ora che abbiamo creato alcuni tag, vediamo cosa abbiamo:
$git tag -lRilascio-20190401
v1.0.1
v1.0.2
v1.0.3
Possiamo vedere che tutti i nostri tag sono visualizzati in ordine alfabetico. È possibile ottenere maggiori informazioni sui tag utilizzando il "-n
Release-20190401 README aggiornato.md
v1.0.1 LEGGIMI aggiornato.md
v1.0.2 La mia versione 1.0.2
v1.0.3 La mia versione 1.0.3
Qui puoi notare una differenza tra tag leggeri e annotati. In questo esempio, "Release-20190401" e "v1.0.1" sono tag leggeri. Il “v1.0.2” e “v1.0.3" sono tag annotati. Tutti puntano allo stesso commit (commit 34671):
$git logcommit 106e0bb02a58ec3e818e9acdf3bb19a9247a0e84 (HEAD -> master, tag: v1.0.4)
Autore: Zak H
Data: Sab 6 aprile 21:06:02 2019 -0700
Funzionalità aggiunta 2
commit 161c6e564e79624623ed767397a98105426d0ec4
Autore: Zak H
Data: Sab 6 aprile 21:05:25 2019 -0700
Funzionalità aggiunta 1
commit 34671d824f9b9951e57f867998cb3c02a11c4805 (tag: v1.0.3, etichetta: v1.0.2,
tag: v1.0.1, tag: Release-20190401)
Autore: Zak H
Data: Sab 6 aprile 20:24:53 2019 -0700
Leggimi aggiornato.md
commit afe9b0c7c9fbce3c3d585afe67358a5eec226e2c (origine/master)
Autore: Zak H
Data: Sab 6 aprile 20:23:55 2019 -0700
Dentro
Tuttavia, i tag leggeri mostrano i commenti del commit stesso che è "README aggiornato".md", mentre i tag annotati mostrano i singoli commenti che sono stati aggiunti durante il processo di creazione dei tag.
Mancia: Se vuoi trovare il numero di commit di un particolare tag, puoi usare il comando "git show":
$git mostra v1.0.3tag v1.0.3
Tag: Zak H
Data: Sab 6 aprile 20:43:30 2019 -0700
La mia versione 1.0.3
commit 34671d824f9b9951e57f867998cb3c02a11c4805 (tag: v1.0.3, etichetta: v1.0.2, etichetta:
v1.0.1, tag: Release-20190401)
Autore: Zak H
Data: Sab 6 aprile 20:24:53 2019 -0700
Leggimi aggiornato.md
diff --git a/README.md b/README.md
indice 9daeafb… 180cf83 100644
--- a/README.md
+++ b/LEGGIMI.md
@@ -1 +1 @@
-test
+prova2
Taggare i commit più vecchi
Puoi anche tornare indietro e taggare un commit più vecchio. Diamo un'occhiata ai log:
$git log --oneline106e0bb (HEAD -> master, tag: v1.0.4) Funzionalità aggiunta 2
161c6e5 Funzionalità aggiunta 1
34671d8 (tag: v1.0.3, etichetta: v1.0.2, etichetta: v1.0.1, tag: Release-20190401) README aggiornato.md
afe9b0c (origine/master) Init
$
Notiamo che il commit 161c6e5 non ha un tag associato. Possiamo taggare questo commit in questo modo:
$git tag -a Release-20190402 161c6e5Apparirà la finestra dei commenti. Dopo aver inserito il commento, possiamo vedere che ora abbiamo il commit taggato:
$git tag -n1Release-20190401 README aggiornato.md
Release-20190402 Aggiunto tag a un commit più vecchio
v1.0.1 LEGGIMI aggiornato.md
v1.0.2 La mia versione 1.0.2
v1.0.3 La mia versione 1.0.3
v1.0.4 Funzionalità aggiunta 2
Rimozione dei tag
Supponiamo che tu decida di non volere i tag "Release-" poiché sono confusi. Puoi prima trovare tutti i tag "Release-":
$git tag -l Rilascio*Rilascio-20190401
Rilascio-20190402
Ora puoi rimuoverli con l'opzione "-d":
$git tag -d Release-20190401Tag eliminato "Release-20190401" (era 34671d8)
$git tag -d Release-20190402
Tag eliminato 'Release-20190402' (era 6ee37bc)
Se controlliamo di nuovo i tag, dovremmo vedere solo i tag che iniziano con "v":
$git tag -n1v1.0.1 LEGGIMI aggiornato.md
v1.0.2 La mia versione 1.0.2
v1.0.3 La mia versione 1.0.3
v1.0.4 Funzionalità aggiunta 2
Sovrascrivere i tag
Supponiamo di avere una situazione in cui "v1.0.Il tag da 4" sta puntando alla Caratteristica 2:
$git log --onelined7b18a4 (HEAD -> master) Aggiunta funzionalità 3
106e0bb (tag: v1.0.4) Aggiunta funzione 2
161c6e5 Funzionalità aggiunta 1
34671d8 (tag: v1.0.3, etichetta: v1.0.2, etichetta: v1.0.1) Leggimi aggiornato Update.md
afe9b0c (origine/master) Init
Ma vogliamo il tag "v1.0.4" che punta alla Caratteristica 3. Se proviamo a taggarlo nuovamente, otteniamo questo errore:
$git tag v1.0.4 d7b18a4fatale: tag 'v1'.0.4' esiste già
Possiamo superare questo problema con l'opzione "-f":
$git tag -f v1.0.4 d7b18a4Tag aggiornato 'v1'.0.4' (era 106e0bb)
Se controlliamo di nuovo il log, vediamo che il tag si è spostato sul commit che vogliamo:
$git log --onelined7b18a4 (HEAD -> master, tag: v1.0.4) Aggiunta funzione 3
106e0bb Funzionalità aggiunta 2
161c6e5 Funzionalità aggiunta 1
34671d8 (tag: v1.0.3, etichetta: v1.0.2, etichetta: v1.0.1) Leggimi aggiornato Update.md
afe9b0c (origine/master) Init
In alternativa, puoi anche eliminare un tag e aggiungerlo nuovamente a un nuovo commit.
Condivisione di tag con altri utenti
Quando si invia il codice al repository remoto, i tag Git non vengono inviati automaticamente pushed. Se vuoi condividere i tuoi tag con altri utenti, devi esclusivamente spingerli.
I tag possono essere spinti in questo modo:
$git push origin v1.0.4Conteggio oggetti: 12, fatto.
Compressione delta utilizzando fino a 4 thread.
Comprimere oggetti: 100% (4/4), fatto.
Oggetti di scrittura: 100% (12/12), 902 byte | 150.00 KiB/s, fatto.
Totale 12 (delta 0), riutilizzato 0 (delta 0)
A /Users/zakh/_work/LearnGIT/git_tagging/remote/project_mayhem
* [nuovo tag] v1.0.4 -> v1.0.4
Ora, se altri utenti clonano il repository remoto, vedranno solo il tag che è stato inserito ("v1.0.4” in questo caso).
Utilizzo di rami e tag
I rami sono utili per nuove funzionalità o per sperimentare. In genere, si desidera effettuare una diramazione quando c'è del lavoro futuro che deve essere svolto e il lavoro è dirompente per il proprio sviluppo attuale. D'altra parte, i tag sono più utili come istantanee. Dovresti usarli per ricordare cose particolari che hai già fatto.
In conclusione
Il tag Git è una funzionalità sottoutilizzata che può fornire un ottimo modo per tenere traccia delle versioni e delle funzionalità speciali. Se imposti buone pratiche sui tag, può aiutarti a comunicare facilmente con il tuo team di sviluppo e semplificare i tuoi processi di sviluppo.
Ulteriori studi:
- https://git-scm.com/book/en/v2/Git-Basics-Tagging
- https://ingegneria del software.stackexchange.com/questions/165725/git-branching-and-tagging-best practice
- https://www.atlante.com/git/tutorials/inspecting-a-repository/git-tag
- https://en.wikipedia.org/wiki/Versione_software
- https://www.tecnopedia.com/definition/25977/software-versioning