Git Tags

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Git Tags bieten eine einfache Möglichkeit, um bestimmte Revisionen eines Repos zu kennzeichnen. Sie können z.B. für die Kennzeichnung einer neuen Release-Version benutzt werden. Dadurch wird ein wichtiger Punkt der Entwicklung permanent markiert und ist einfach wieder zu erkennen. Dieser Artikel zeigt wie lightweight und annotated Tags erstellt werden und mittels gpg-Key signiert werden können.

Tags erstellen

Ein neuer Tag kann mit dem Kommando "git tag" erstellt werden. Es werden zwei Arten von Tags unterschieden:[1]

  1. Annotated Tags: Diese Tags resultieren immer in einem eigenen Commit und bringen Informationen wie Tagger, Email, Datum oder Signatur mit.
  2. Lightweight Tags: Diese Art von Tags sind eine simple Referenz auf einen Commit (der Hash-Wert wird als Tag referenziert). Extra-Information werden zu diesen Tags nicht hinzugefügt.

Die folgenden beiden Beispiele verwenden beide Arten von Tags:

:~/repos/dev-1$ git tag v1.2
:~/repos/dev-1$ git show v1.2
commit cd490b9cda416a4b93b4a6bf4ac2c0ddb6740cc5
Author: Test User <tktest@example.com>
Date:   Tue Feb 7 07:15:19 2012 +0100

    version 1.2

Wie bereits erwähnt erscheint bei diesem Tag nur die ursprüngliche Commit-Message. Für die Erstellung des kommentierten, signierten Tags wird zuerst ein gpg-Key erstellt und als Signing-Key konfiguriert:

:~/repos/dev-1$ gpg --gen-key
...
...
:~/repos/dev-1$ gpg --list-secret-keys
/home/tktest/.gnupg/secring.gpg
---------------------------------
sec   4096R/9B6B1E58 2012-02-07
uid                  Tktest <tktest@example.com>
ssb   4096R/033A49B9 2012-02-07
:~/repos/dev-1$ git config user.signingkey "Tktest <tktest@example.com>"

Nach erfolgreicher Konfiguration kann ein signierter Tag erstellt werden. Dazu wird der Hash-Wert des letzten Commits mit angegeben:

:~/repos/dev-1$ git tag -s v1.2 cd490b9cda416a4b93b4a6bf4ac2c0ddb6740cc5

Sie benötigen einen Passwortsatz, um den geheimen Schlüssel für
Nutzer: "Tktest <tktest@example.com>" zu entsperren
4096-Bit RSA Schlüssel, ID 9B6B1E58, erstellt 2012-02-07

gpg: GPG-Agent ist in dieser Sitzung nicht vorhanden

Bei einem "git show" werden die Informationen des Taggers gezeigt:

:~/repos/dev-1$ git show v1.2
tag v1.2
Tagger: Test User <tktest@test.com>
Date:   Tue Feb 7 10:44:14 2012 +0100

Version 1.2
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQIcBAABAgAGBQJPMPJ3AAoJENmWpoibax5YJpgP/1Az513h2OrHgA9nvk74kgUF
mgtqJqDQyolsYQtxRiQSCN7xJxw3rrhH2YdLJsYTb5dfMPbuSpACjOVjXov1XiMh
W7rJHyfuW04JHNm/yIG5/wTrfIizNMNQ/bh7QatQdZIRzvwUHB7Y0A2hGtqb6qFC
QrGREqEen3hS0kgDV04bLcm62zmuX8vm5E7PrtS8ou6lSucmi7Yki6LP+aHwrOuz
V99WIGPY/U/qEd81wcGoHEQGhFu5ZTZPzik6RWlACo51iG9JTPMiGDUiLQyV9R9C
QUHa6PYjrHL5APEU5JOZdoK+Hnfs+oD6Nz14oJ6qDoHJ/x7C0qh8YWgVuMG5v+1R
4L1dGLk0sGpsMAjh5Sa38OgXvE4KmYzUj4S92aaNDNwcN6M2iW3Jzktxa8omeZlJ
payWNyxz/soYsFCZyapV0leJ2u5UuKYgw7gswbuyrCagr+9hOR+iGieSjAmrR9LR
1wzoZtn4XpPAjxTY0d34V+d9UH6Wm434d18oyOPbqInj/hA2+YSoJ7QEt5p10RWE
eegY6hniNLdZiMKbH051KeyVZEOoqa+zGspxtxkRWlKtrappx22aFh4Ja6HOzve3
MSde58Yw4Z9cfblPTcbQMgiC+WHOPS9vnDn08zt+0B3aM9X3QDzGU9Y+AQy74Hp7
lXIAQexyjN2DZr/MPYtF
=fsMS
-----END PGP SIGNATURE-----

commit cd490b9cda416a4b93b4a6bf4ac2c0ddb6740cc5
...

Vorhandene Tags ins Repo pushen

Standardmäßig werden vorhandene Tags nicht mittels "git push" übertragen. Einzelne Tags können unter Angabe von "Ziel" und "Tagname" gepusht werden:

:~/repos/dev-1$ git push origin v1.2
tktest@192.168.56.101's password: 
Counting objects: 1, done.
Writing objects: 100% (1/1), 801 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To ssh://tktest@192.168.56.101/home/tktest/repos/dev-1
 * [new tag]         v1.2 -> v1.2

Alternativ kann die Option "--tags" beim Push alle Tags aus dem aktuellen Branch übertragen.

Archiv von einer Tag-Version erstellen

Mit git-archive[2] wird einer bestimmten Tag-Version ein Archiv erstellt:

git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
              [-o | --output=<file>] [--worktree-attributes]
              [--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
              [path...]

Als Beispiel ein tar.gz des Tags der Version 0.1:

git archive --format=tar.gz 0.1 -o version-0.1.tar.gz

Einzelnachweise

  1. Github manual - tagging (learn.github.com)
  2. git-archive man-Page (linux.die.net)

Das könnte Sie auch interessieren

Etc-Verzeichnis mit etckeeper versionieren
Git diff mit odt-Dateien
Git Workflows