Wie liste ich alle Tags zusammen mit der vollständigen Nachricht in git auf?

360

Ich möchte, dass git alle Tags zusammen mit der vollständigen Annotation oder Commit-Nachricht auflistet. So etwas ist nah:

git tag -n5

Dies macht genau das, was ich will, außer dass es nur bis zu den ersten 5 Zeilen der Tag-Nachricht angezeigt wird.

Ich denke, ich kann nur eine sehr große Anzahl verwenden. Was ist die höchste Zahl, die ich hier verwenden kann? Ist es auf jedem Computer gleich?

UPDATE : Ich hatte viel Zeit, darüber nachzudenken, und jetzt denke ich, dass ich nicht unbedingt die Gesamtheit jeder Nachricht zeigen möchte, wenn einige von ihnen außerordentlich lang sind. Ich hatte nicht wirklich ein besonderes Bedürfnis, das es erforderlich machte, dass ich massive Nachrichten sah (abgesehen von meiner eigenen Neigung, in allem, was ich schreibe, einschließlich Tag-Nachrichten, langwierig zu sein). Die Idee, dass sie mir nicht unbedingt die ganze Nachricht zeigen würde, gefiel mir einfach nicht, da ich das Gefühl hatte, Informationen vor mir zu verbergen. Zu viele Informationen können aber auch eine schlechte Sache sein.

still_dreaming_1
quelle
62
git tag -ntat es für mich
Martin Berger
11
git tag -ndruckt nur die erste Zeile der Anmerkung gemäß der Manpage.
Paul Price
@INTPner, vereinbart, -l-Tag wird zum Auflisten von Tags mit einem bestimmten Muster verwendet. Antwort bearbeiten.
Zubair

Antworten:

349

Versuchen Sie dies, es werden alle Tags zusammen mit Anmerkungen und 9 Nachrichtenzeilen für jedes Tag aufgelistet:

git tag -n9

kann auch verwenden

git tag -l -n9

Wenn bestimmte Tags aufgelistet werden sollen:

git tag -l -n9 v3.*

(zB zeigt der obige Befehl nur Tags an, die mit "v3" beginnen.)

-l, --list Listet Tags mit Namen auf, die dem angegebenen Muster entsprechen (oder alle, wenn kein Muster angegeben ist). Wenn Sie "git tag" ohne Argumente ausführen, werden auch alle Tags aufgelistet. Das Muster ist ein Shell-Platzhalter (dh mit fnmatch (3) abgeglichen). Es können mehrere Muster angegeben werden; Wenn einer von ihnen übereinstimmt, wird das Tag angezeigt.

Zubair
quelle
6
Dadurch wird nur die erste Zeile jeder Anmerkung gedruckt.
Paul Price
3
@ Paul Price: Nur Sie haben eine Anmerkung, andernfalls wird die Festschreibungsnachricht gedruckt. Stimmen Sie zu, dass dies nicht die Antwort ist.
Ciro Santilli 法轮功 冠状 病 六四 事件 18
3
Gemäß der Dokumentation besteht die -lMöglichkeit, nach einem Muster zu filtern. Ich sehe nicht, wie das hier hilfreich wäre. Vermisse ich etwas
still_dreaming_1
2
@INTPnerd ja, das -list hier völlig überflüssig
Lambart
1
@ P.MyerNore Sie müssen eine seltsame Version von git verwenden oder zusätzliche Argumente übergeben, um etwas mehr zu tun, als diese Frage stellt. Es ist jedoch gut zu wissen, dass für bestimmte Situationen das -l benötigt wird.
still_dreaming_1
119
git tag -n99

Kurz und bündig. Dadurch werden bis zu 99 Zeilen aus jeder Tag-Annotation / Commit-Nachricht aufgelistet. Hier ist ein Link zur offiziellen Dokumentation für git tag .

Ich denke jetzt, dass die Beschränkung, nur bis zu 99 Zeilen pro Tag anzuzeigen, tatsächlich eine gute Sache ist, da die meiste Zeit, wenn es wirklich mehr als 99 Zeilen für ein einzelnes Tag gäbe, Sie den Rest nicht wirklich sehen möchten die Zeilen würdest du? Wenn Sie mehr als 99 Zeilen pro Tag sehen möchten, können Sie diese jederzeit auf eine größere Zahl erhöhen.

Ich meine, ich denke, es könnte eine bestimmte Situation oder einen bestimmten Grund geben, massive Tag-Nachrichten zu sehen, aber an welchem ​​Punkt möchten Sie nicht die gesamte Nachricht sehen? Wann hat es mehr als 999 Zeilen? 10.000? 1.000.000? Mein Punkt ist, dass es normalerweise sinnvoll ist, die Anzahl der Zeilen, die Sie sehen würden, zu begrenzen, und mit dieser Zahl können Sie diese festlegen.

Da ich ein Argument für das vorbringe, was Sie im Allgemeinen beim Betrachten Ihrer Tags sehen möchten, ist es wahrscheinlich sinnvoll, so etwas als Alias ​​festzulegen (aus dem Kommentar von Iulian Onofrei unten):

git config --global alias.tags 'tag -n99'

Ich meine, Sie möchten nicht wirklich git tag -n99jedes Mal eingeben müssen, wenn Sie nur Ihre Tags sehen möchten, oder? Sobald dieser Alias ​​konfiguriert ist und Sie Ihre Tags sehen möchten, geben Sie einfach git tagsin Ihr Terminal ein. Persönlich gehe ich lieber einen Schritt weiter und erstelle noch mehr abgekürzte Bash-Aliase für alle meine häufig verwendeten Befehle. Zu diesem Zweck können Sie Ihrer .bashrc-Datei Folgendes hinzufügen (funktioniert unter Linux und ähnlichen Umgebungen):

alias gtag='git tag -n99'

Wann immer Sie Ihre Tags sehen möchten, geben Sie einfach ein gtag. Ein weiterer Vorteil des Alias-Pfads (entweder Git-Aliase oder Bash-Aliase oder was auch immer) besteht darin, dass Sie bereits eine Stelle eingerichtet haben, an der Sie weitere Anpassungen vornehmen können, wie Sie persönlich Ihre Tags im Allgemeinen anzeigen lassen möchten (z. B. Sortieren) sie auf bestimmte Weise wie in meinem Kommentar unten, etc). Sobald Sie die Mühe überwunden haben, Ihren ersten Alias ​​zu erstellen, werden Sie feststellen, wie einfach es ist, mehr davon für andere Dinge zu erstellen, die Sie gerne auf benutzerdefinierte Weise bearbeiten möchten git log, aber speichern Sie diesen für eine andere Frage / Antwort .

still_dreaming_1
quelle
3
git config --global alias.tags 'tag -n99'
Iulian Onofrei
@IulianOnofrei, nett, ich wusste nicht, dass Git dir erlaubt, Aliase zu definieren. Mir ist klar, dass dies kein Thema ist, aber ich kann nicht widerstehen. Dies ist, was ich jetzt benutze (in Ihrem .bashrc oder so etwas platziert):alias gtag='git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags | sort -V'
still_dreaming_1
25

Die Antwort von Mark Longair (mit git show) kommt dem nahe, was in der Frage gewünscht wird. Es enthält jedoch auch das Commit, auf das das Tag zeigt, sowie den vollständigen Patch für dieses Commit. Da das Festschreiben etwas unabhängig vom Tag sein kann (es ist nur ein Festschreiben, das das Tag zu erfassen versucht), kann dies unerwünscht sein. Ich halte folgendes für etwas schöner:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
Paul Price
quelle
Marks Git-Show zeigte keine Patches für meine Verwendung. Sein Befehl lässt -p oder --patch weg, aber um ganz sicher zu sein, dass das Diff übersprungen wird, kann man Folgendes verwenden: --no-patch. (auf Git v2.7.1 / Mac)
AnneTheAgile
13

Es ist alles andere als hübsch, aber Sie könnten ein Skript oder einen Alias ​​erstellen, der ungefähr so ​​funktioniert:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
Mark Longair
quelle
Gibt es einen Grund , nicht zu ersetzen git for-each-ref refs/tags/ --format='%(refname)'mit git tag -l?
Shai Berger
@ShaiBerger: In der Praxis glaube ich nicht - ich glaube, ich habe nur gedacht, dass git tages sich um Porzellan handelt und git for-each-refum Sanitärinstallationen, daher sollte die Ausgabe des letzteren für die Skripterstellung stabiler sein.
Mark Longair
10

Nur letzte Tag-Nachricht:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
gaRex
quelle
2
Für alle anderen, die dies von Google erfahren: Wenn Sie die Nachricht von einem bestimmten Tag git cat-file -p <tag> | tail -n +6
Kit Peters
6

Verwenden Sie die Option --format

git tag -l --format='%(tag) %(subject)'
Александр Туманов
quelle
2

Ich bevorzuge dies in der Befehlszeile, aber wenn Ihnen eine Weboberfläche nichts ausmacht und Sie GitHub verwenden, können https://github.com/user/repo/tagsSie das "..." neben jedem Tag besuchen und darauf klicken, um dessen Anmerkung anzuzeigen.

agouge
quelle