Tags¶
Tags gibt es in zwei grundsätzlichen Varianten:
Annotated Tags - Tags mit Anmerkungen; wird auch als Objekt in Git abgelegt
Lightweight Tags - ohne Anmerkungen; einfach nur eine Referenz im Ordner /tags
Um Commits anzusprechen nutzt man ihre (abgekürzten) SHA-1-Summen. Diese Bezeichner lassen sich aber schlecht verinnerlichen / merken.
Hinweis
Tags sind - im Gegensatz zu Branches oder HEAD - statisch!
Die Anmerkungen für Annotated Tags (können) beinhalten:
Autor
Beschreibung
GPG Signatur
und natürlich Referenz auf markiertes Objekt
Basisbefehl: git tag (listet alle Tags)
Nur spezielle Tags filtern und anzeigen: (hier: Git-Repo)
$ git tag --list v0.*
...
$ git show v0.99 | head -20
tag v0.99
Test-release for wider distribution.
I'll make the first public RPM's etc, thus the tag.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQBC0b9oF3YsRnbiHLsRAlUUAKCJEyvw8tewGFKd/A3aCd82Wi/zAgCgl7z4
GYPjO+Xio0IvuEYsrhFc2KI=
=TVVN
-----END PGP SIGNATURE-----
commit a3eb250f996bf5e12376ec88622c4ccaabf20ea8
Author: Junio C Hamano <junkio@cox.net>
Date: Sun Jul 10 15:40:43 2005 -0700
[PATCH] alternate object store and fsck
The location alt_odb[j].name[0..] is filled with ??/?{38} to form a sha1
Man sieht hier den Commit a3eb250f996bf5e12376ec88622c4ccaabf20ea8 auf den referenziert wurde.
Lightweight Tags erstellen
Einfach nur: git tag tagname erstellt Lightweight Tag auf HEAD.
Aber natürlich kann man beliebige tagname nutzen: Commits-SHA-1, master oder HEAD~…
Annotated Tags erstellen
Sollte man für öffentliche Git-Repos bevorzugen!
Hinweis
Tags werden nicht automatisch in öffentliche Repos gepusht - hierzu später mehr, wenn es dann um Remote Repositorys geht.
Hier - wie beim Commiten - die Tag-Beschreibung mit -m ergänzen: git tag -m "Erste Veröffentlichung" v0.2
Für die Signierung von Tags nutzt man -s (Anm.: entsprechend eigene Signaturen vorausgesetzt)
Für die Überprüfung von signierten Tags nutzt man -v: git tag -v v1.7.1 (hier wieder Git-Repo
und den bereits importierten Schlüssel des Signierenden vorausgesetzt).
Tags auflisten
Am einfachsten mit git tag (Short-Form)
Etwas ausführlicher: git tag -n (Anzahl von Zeilen zum Tag auflisten -n<x>)
Mit Infos zu den Tag-Objekten und verknüpften Commits: git show-ref --tags -d
Oder versuchen mit git show --name-only <tagname> (Infos zu Tagname)
Tags löschen
Man löscht Tags mit -d: git tag -d tagname
Gefahr
Beim Veröffentlichen von Tags muss man darauf achten, dass sie nicht auf unterschiedliche Objekte referenzieren!
Non-Commit Tags
Die Tags können auf beliebige Objekte referenzieren - also nicht nur auf Commits, sondern auch auf Dateien.
Wir erinnnern uns: Dateien werden als Blog-Objekte im Git abgelegt. Also einfach einen Tag auf die SHA-1-Summe (den Objekt-Bezeichner) für die gewünschte Datei (bzw. den Dateizustand) referenzieren.
Der Chef-Git-Entwickler hat seine GPG-Pub-Datei ins Git gelegt und mit dem Tag junio-gpg-pub referenziert.
$ git show junio-gpg-pub | head -15
tag junio-gpg-pub
Tagger: Junio C Hamano <gitster@pobox.com>
Date: Thu Nov 20 15:12:15 2014 -0800
GPG key to sign git.git archive
This blob contains the GPG public key I use to sign git.git archive.
To use it to verify tags I signed, do:
$ git-cat-file blob junio-gpg-pub | gpg --import
to import it into your keyring, and then
$ git-tag -v $tag_to_be_verified
...
Tags - pull/push
Bereits veröffentlichte Tags werden automatisch mit einem git pull heruntergeladen.
Für das Veröffentlichen: git push origin v0.2
git describe
Mit dem Aufruf git describe bzw. git describe --tags erhält man eine Beschreibung für den aktuellen Tag
und seinen Abstand zum Commit nach dem folgenden -g: (hier wieder für das Git-Git ;-)
$ git describe
v2.22.0-545-g9c9b961d7e
Aktueller Tag also v2.22.0 und man ist 545 Positionen vom SHA-1 9c9b961d7e entfernt.
Git Describe (grafisch - Git Gui)¶
Etwas praxirelevanter: ein Commit 28ba96a vom 23.04.2010
$ git describe --tags 28ba96a
v1.7.1-7-g28ba96ab27
Dieser Tag hat 7 Positionen Differenz zum (vorherigen) Tag v1.7.1!