Der Unterschied zwischen den Befehlen besteht darin, dass einer Ihnen eine Tag-Nachricht liefert, während der andere dies nicht tut. Ein mit Anmerkungen versehenes Tag enthält eine Nachricht, die mit git-show (1) angezeigt werden kann, während ein Tag ohne Anmerkungen nur ein benannter Zeiger auf ein Commit ist.
Weitere Informationen zu Lightweight Tags
In der Dokumentation heißt es : "Um ein leichtes Tag zu erstellen, geben Sie keine der Optionen -a, -s oder -m an, sondern geben Sie nur einen Tag-Namen an." Es gibt auch verschiedene Möglichkeiten, eine Nachricht auf kommentierte Tags zu schreiben:
Wenn Sie verwenden git tag <tagname>, erstellt Git bei der aktuellen Version ein Tag, fordert Sie jedoch nicht zur Eingabe einer Anmerkung auf. Es wird ohne Nachricht markiert (dies ist ein leichtes Tag).
Wenn Sie verwenden git tag -a <tagname>, werden Sie von Git zur Eingabe einer Anmerkung aufgefordert, es sei denn, Sie haben auch das Flag -m verwendet, um eine Nachricht bereitzustellen.
Wenn Sie verwenden git tag -a -m <msg> <tagname>, markiert Git das Commit und kommentiert es mit der bereitgestellten Nachricht.
Wenn Sie verwenden git tag -m <msg> <tagname>, verhält sich Git so, als hätten Sie das Flag -a für Anmerkungen übergeben und die bereitgestellte Nachricht verwendet.
Grundsätzlich kommt es nur darauf an, ob das Tag eine Anmerkung und einige andere damit verbundene Informationen enthalten soll oder nicht.
Gibt es einen Unterschied zwischen einem Tag "Annotation" und einer Commit-Nachricht?
Steve Bennett
3
@SteveBennett Ja. Eine Tag-Annotation ist keine Commit-Nachricht. Sie können es nicht mit git-log (1) sehen; Sie müssen git-show (1) verwenden.
Todd A. Jacobs
114
Der Unterschied zwischen "kommentierten" und "leichten" Tags geht über die Nachricht hinaus. Sie können ein kommentiertes Tag ohne message ( git tag -a <tag> -m '') haben, aber ein kommentiertes Tag hat immer einen Tagger (Autor) und ein Datum .
Piotr Findeisen
1
Auch für mich. Versions-Tags haben normalerweise ziemlich nutzlose Nachrichten (kann es mehr als den Namen sagen? Wofür?). Leider erwähnt diese Antwort mit der höchsten Abstimmung diesen Unterschied nicht.
Piotr Findeisen
44
Ein weiterer wichtiger Punkt ist, dass beim Verschieben Ihrer Tags in ein Remote-Repository mit git push --follow-tagsnur die mit Anmerkungen versehenen Tags übertragen werden.
Xatoo
208
Schieben Sie kommentierte Tags, und halten Sie sie leicht lokal
man git-tag sagt:
Mit Anmerkungen versehene Tags sind für die Freigabe vorgesehen, während Lightweight-Tags für private oder temporäre Objektbezeichnungen vorgesehen sind.
Und bestimmte Verhaltensweisen unterscheiden sie in einer Weise, dass diese Empfehlung nützlich ist, z.
Mit Anmerkungen versehene Tags können eine Nachricht, einen Ersteller und ein Datum enthalten, die sich von dem Commit unterscheiden, auf das sie verweisen. Sie können sie also verwenden, um ein Release zu beschreiben, ohne ein Release-Commit durchzuführen.
Lightweight-Tags verfügen nicht über diese zusätzlichen Informationen und benötigen sie auch nicht, da Sie sie nur selbst zum Entwickeln verwenden.
Grundsätzlich sind Lightweight-Tags nur Zeiger auf bestimmte Commits. Es werden keine weiteren Informationen gespeichert . auf der anderen Seite, kommentierte Tags sind normale Objekte , die ein Autor und ein Datum und können genannt werden , weil sie ihre eigenen SHA Schlüssel haben.
Wenn Sie wissen, wer was und wann markiert hat, verwenden Sie kommentierte Tags. Wenn Sie nur einen bestimmten Punkt in Ihrer Entwicklung markieren möchten , egal wer und wann dies getan hat, sind leichte Tags gut genug.
Normalerweise würden Sie sich für kommentierte Tags entscheiden, aber es liegt wirklich am Git-Master des Projekts.
Antworten:
TL; DR
Der Unterschied zwischen den Befehlen besteht darin, dass einer Ihnen eine Tag-Nachricht liefert, während der andere dies nicht tut. Ein mit Anmerkungen versehenes Tag enthält eine Nachricht, die mit git-show (1) angezeigt werden kann, während ein Tag ohne Anmerkungen nur ein benannter Zeiger auf ein Commit ist.
Weitere Informationen zu Lightweight Tags
In der Dokumentation heißt es : "Um ein leichtes Tag zu erstellen, geben Sie keine der Optionen -a, -s oder -m an, sondern geben Sie nur einen Tag-Namen an." Es gibt auch verschiedene Möglichkeiten, eine Nachricht auf kommentierte Tags zu schreiben:
git tag <tagname>
, erstellt Git bei der aktuellen Version ein Tag, fordert Sie jedoch nicht zur Eingabe einer Anmerkung auf. Es wird ohne Nachricht markiert (dies ist ein leichtes Tag).git tag -a <tagname>
, werden Sie von Git zur Eingabe einer Anmerkung aufgefordert, es sei denn, Sie haben auch das Flag -m verwendet, um eine Nachricht bereitzustellen.git tag -a -m <msg> <tagname>
, markiert Git das Commit und kommentiert es mit der bereitgestellten Nachricht.git tag -m <msg> <tagname>
, verhält sich Git so, als hätten Sie das Flag -a für Anmerkungen übergeben und die bereitgestellte Nachricht verwendet.Grundsätzlich kommt es nur darauf an, ob das Tag eine Anmerkung und einige andere damit verbundene Informationen enthalten soll oder nicht.
quelle
git tag -a <tag> -m ''
) haben, aber ein kommentiertes Tag hat immer einen Tagger (Autor) und ein Datum .git push --follow-tags
nur die mit Anmerkungen versehenen Tags übertragen werden.Schieben Sie kommentierte Tags, und halten Sie sie leicht lokal
man git-tag
sagt:Und bestimmte Verhaltensweisen unterscheiden sie in einer Weise, dass diese Empfehlung nützlich ist, z.
Mit Anmerkungen versehene Tags können eine Nachricht, einen Ersteller und ein Datum enthalten, die sich von dem Commit unterscheiden, auf das sie verweisen. Sie können sie also verwenden, um ein Release zu beschreiben, ohne ein Release-Commit durchzuführen.
Lightweight-Tags verfügen nicht über diese zusätzlichen Informationen und benötigen sie auch nicht, da Sie sie nur selbst zum Entwickeln verwenden.
git describe
Ohne Befehlszeilenoptionen werden nur kommentierte Tags angezeigtInterne Unterschiede
Sowohl Lightweight- als auch Annotated-Tags sind eine Datei
.git/refs/tags
, die einen SHA-1 enthältBei Lightweight-Tags verweist der SHA-1 direkt auf ein Commit:
druckt das gleiche wie der SHA-1 des KOPFES.
Kein Wunder also, dass sie keine anderen Metadaten enthalten können.
Mit Anmerkungen versehene Tags verweisen auf ein Tag-Objekt in der Objektdatenbank.
enthält die SHA des mit Anmerkungen versehenen Tag-Objekts:
und dann können wir seinen Inhalt erhalten mit:
Beispielausgabe:
Und so enthält es zusätzliche Metadaten. Wie wir aus der Ausgabe sehen können, sind die Metadatenfelder:
Eine detailliertere Analyse des Formats finden Sie unter: Was ist das Format eines Git-Tag-Objekts und wie berechnet man seinen SHA?
Boni
Bestimmen Sie, ob ein Tag mit Anmerkungen versehen ist:
Ausgänge
commit
Da für Lightweight kein Tag-Objekt vorhanden ist, verweist es direkt auf das Committag
für kommentiert, da in diesem Fall ein Tag-Objekt vorhanden istNur Lightweight-Tags auflisten: Wie kann ich alle Lightweight-Tags auflisten?
quelle
Der große Unterschied ist perfekt erklärt hier .
Grundsätzlich sind Lightweight-Tags nur Zeiger auf bestimmte Commits. Es werden keine weiteren Informationen gespeichert . auf der anderen Seite, kommentierte Tags sind normale Objekte , die ein Autor und ein Datum und können genannt werden , weil sie ihre eigenen SHA Schlüssel haben.
Wenn Sie wissen, wer was und wann markiert hat, verwenden Sie kommentierte Tags. Wenn Sie nur einen bestimmten Punkt in Ihrer Entwicklung markieren möchten , egal wer und wann dies getan hat, sind leichte Tags gut genug.
Normalerweise würden Sie sich für kommentierte Tags entscheiden, aber es liegt wirklich am Git-Master des Projekts.
quelle