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)

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!