git describe

Untersuchen & Vergleichen

Gibt einem Commit einen lesbaren Namen nach dem nächsten Tag


Der Befehl 'git describe' benennt einen Commit nach dem nächsten von ihm erreichbaren Tag: der Tag selbst, wenn der Commit getaggt ist, sonst tag-N-gHASH (N Commits nach dem Tag, dann der abgekürzte Hash). Build-Skripte stempeln damit jede Build-Version. Standardmäßig zählen nur annotierte Tags.

Syntax

git describe [--tags] [--always] [--dirty] [--abbrev=<n>] [<commit-ish>...]
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Optionen

Klicke auf eine Option, um sie aufzuklappen

Einsteiger (3)

Jeden Tag verwenden, auch leichtgewichtige, nicht nur annotierte.

Bei BedarfWenn dein Projekt Lightweight-Tags nutzt

Beispiel

git describe --tags

Zeigt den abgekürzten Commit-Hash, wenn kein Tag den Commit beschreiben kann.

EmpfohlenNie scheitern: den kurzen Hash ausgeben, wenn kein Tag gefunden wird

Beispiel

git describe --always

Hängt -dirty an, wenn das Arbeitsverzeichnis nicht committete Änderungen hat.

EmpfohlenBuilds aus nicht committeten Änderungen kennzeichnen

Beispiel

git describe --dirty

Die richtige Option wählen

Einen describe-Namen lesen

v1.0-2-g1a2b3c4

BefehlBedeutung
v1.0Der nächste Tag
2Commits seit diesem Tag
g1a2b3c4„g" für git + der abgekürzte Hash
-dirtyNicht committete Änderungen (mit --dirty)

Beispiele

HEAD beschreiben

git describe

v1.0-2-g1a2b3c4: zwei Commits nach v1.0.


Leichtgewichtige Tags einbeziehen

git describe --tags

Auch Tags ohne -a berücksichtigen.


Nie scheitern

git describe --always --dirty

Hash, wenn kein Tag, -dirty bei lokalen Änderungen.

Workflow-Beispiele

1
git describe --tags --always --dirty

Den Versions-String berechnen

2
echo "$(git describe --tags --always)" > version.txt

Ihn in den Build schreiben

Fehlerbehebung

fatal: No names found, cannot describe anything.

Ursache: Das Repository hat keine Tags

Lege einen an (git tag -a v0.1 -m ...) oder nutze --always

fatal: No annotated tags can describe ...

Ursache: Es gibt nur leichtgewichtige Tags

Nutze --tags, oder lege den Tag mit -a neu an

Tipps & Stolperfallen

Best Practices

  • ✓Nutze annotierte Tags für Releases, damit describe ohne --tags funktioniert.
  • ✓Nutze --always in Skripten, damit sie nie scheitern.

Häufige Fehler

  • ✗"No names found" bekommen, weil das Projekt nur leichtgewichtige Tags hat — ergänze --tags.
  • ✗Das g in -g1a2b3c4 für einen Teil des Hashs halten: es steht nur für „git".

FAQ

A:

Es nimmt den Tag mit den wenigsten Commits zwischen ihm und dem beschriebenen Commit.