Eine Tag-Annotation ist keine Commit-Nachricht. Sie können es nicht mit git-log (1) sehen; Sie müssen Git-Show (1)
Oxymoron
Git Tag -n war interessant! Aber es ist nicht kugelsicher für mein spezifisches Problem.
G. Sylvie Davies
1
Ich mag "git show-ref -d --tags".
G. Sylvie Davies
Antworten:
54
git for-each-refHier erfahren Sie, was jede Referenz standardmäßig ist, ihre ID und ihren Typ. Um es auf nur Tags zu beschränken, tun Sie dies git for-each-ref refs/tags.
Die Ausgabe besteht aus drei Feldern: dem Hash eines Objekts, dem Typ des Objekts und dem Namen in refs / tags, der sich auf das Objekt bezieht. Ein sogenanntes "leichtes" Tag ist ein Name in refs / tags, der sich auf ein commitObjekt bezieht . Ein "kommentiertes" Tag ist ein Name in refs / tags, der auf ein tagObjekt verweist .
Als ich dies versuchte, listete die Ausgabe jedes Tag entweder als a commitoder a auf tag. Ich nehme an, diese weisen auf leichte bzw. mit Anmerkungen versehene Tags hin.
Stevoisiak
4
@StevenVascellaro Das ist richtig, ein leichtes Tag ist nur die lokale Referenz, die mit "refs / tags" beginnt. Es kann sich um alles handeln. Ein Tag in der Objektdatenbank hat mehr als nur einen Namen und kann wie jedes andere Objekt versendet werden. Git erstellt lokale Verweise für jedes Tag in der Objektdatenbank, sodass die Unterscheidung etwas unscharf ist. Im Allgemeinen muss sich niemand mehr darum kümmern, sobald der Workflow für sein Projekt eingerichtet ist.
Bis zum
3
Ist commitalso leicht und tagmit Anmerkungen versehen?
Pontiacks
6
@Pontiacks, die Ausgabe hat drei Felder: Der Hash eines Objekts, der Typ des Objekts und der Name in refs / tags, der sich auf das Objekt bezieht. Ein sogenanntes "leichtes" Tag ist ein Name in refs / tags, der sich auf ein commitObjekt bezieht . Ein "kommentiertes" Tag ist ein Name in refs / tags, der auf ein tagObjekt verweist .
Solomon Slow
44
Der git show-ref -d --tagsBefehl erledigt dies, da Lightweight-Tags einmal in der Ausgabe und annotierte Tags zweimal vorkommen. Außerdem enthalten nur mit Anmerkungen versehene Tags den Dereferenzierungsoperator "^ {}" in der Ausgabe.
Holen Sie sich den Tag-Namen (sagen wir foo) und machen Sie dann a git cat-file -t foo. Wenn es sich um ein mit Anmerkungen versehenes Tag handelt, cat-filewird Ihnen mitgeteilt, dass es sich um ein "Tag" handelt. Wenn es sich um ein einfaches Tag handelt, cat-filewird Ihnen mitgeteilt, dass es sich um ein "Commit" handelt.
Update: Wie Oxymoron in seinem Kommentar sagte, git showfunktioniert es auch, aber es gibt Ihnen mehr Informationen als nur, um welche Art von Tag es sich handelt.
Für "ein bestimmtes Tag" (wie in der Frage angegeben) scheint dies bei weitem die beste Antwort zu sein.
Phils
1
Hervorragende Antwort - der Schlüssel dazu ist die Option "-t" in "git cat-file". In der Manpage wird Folgendes erläutert: "-t Zeigen Sie anstelle des Inhalts den durch <Objekt> gekennzeichneten Objekttyp an."
git tag -n
etwas für dichAntworten:
git for-each-ref
Hier erfahren Sie, was jede Referenz standardmäßig ist, ihre ID und ihren Typ. Um es auf nur Tags zu beschränken, tun Sie diesgit for-each-ref refs/tags
.Hier ist ein Beispiel:
quelle
commit
oder a auftag
. Ich nehme an, diese weisen auf leichte bzw. mit Anmerkungen versehene Tags hin.commit
also leicht undtag
mit Anmerkungen versehen?commit
Objekt bezieht . Ein "kommentiertes" Tag ist ein Name in refs / tags, der auf eintag
Objekt verweist .Der
git show-ref -d --tags
Befehl erledigt dies, da Lightweight-Tags einmal in der Ausgabe und annotierte Tags zweimal vorkommen. Außerdem enthalten nur mit Anmerkungen versehene Tags den Dereferenzierungsoperator "^ {}" in der Ausgabe.Und diese Ausgabe kann dann mit den Befehlen unix sort, sed, cut und uniq massiert werden, um die Ausgabe besser lesbar zu machen:
Für mein ursprüngliches Repo (aus meiner Frage) wird Folgendes ausgegeben:
(zB war 1.2.3 "leicht" und "1.2.4" wurde kommentiert).
quelle
Holen Sie sich den Tag-Namen (sagen wir
foo
) und machen Sie dann agit cat-file -t foo
. Wenn es sich um ein mit Anmerkungen versehenes Tag handelt,cat-file
wird Ihnen mitgeteilt, dass es sich um ein "Tag" handelt. Wenn es sich um ein einfaches Tag handelt,cat-file
wird Ihnen mitgeteilt, dass es sich um ein "Commit" handelt.Update: Wie Oxymoron in seinem Kommentar sagte,
git show
funktioniert es auch, aber es gibt Ihnen mehr Informationen als nur, um welche Art von Tag es sich handelt.quelle
Bitte versuchen Sie es mit
git describe
https://git-scm.com/docs/git-describe
quelle