522 Stimmen

Was ist der Unterschied zwischen einem kommentierten und einem unkommentierten Tag?

Wenn ich die aktuelle Übertragung markieren möchte. Ich weiß, dass beide der folgenden Befehlszeilen funktionieren:

git tag <tagname>

y

git tag -a <tagname> -m '<message>'

Worin besteht der Unterschied zwischen diesen Befehlen?

405voto

Todd A. Jacobs Punkte 75903

TL;DR

Der Unterschied zwischen den beiden Befehlen besteht darin, dass der eine eine Tag-Meldung liefert, der andere nicht. Ein kommentiertes Tag hat eine Nachricht, die mit git-show(1) angezeigt werden kann, während ein Tag ohne Anmerkungen nur ein benannter Zeiger auf eine Übertragung ist.

Mehr über Lightweight Tags

Nach Angaben der Dokumentation : "Um ein leichtgewichtiges Tag zu erstellen, geben Sie keine der Optionen -a, -s oder -m an, sondern nur einen Tag-Namen". Es gibt auch einige verschiedene Optionen, um eine Nachricht auf kommentierte Tags zu schreiben:

  • Wenn Sie git tag <tagname> erstellt Git ein Tag in der aktuellen Revision, fordert Sie aber nicht zur Eingabe einer Anmerkung auf. Das Tag wird ohne eine Nachricht erstellt (dies ist ein leichtes Tag).
  • Wenn Sie git tag -a <tagname> wird Git Sie zur Eingabe einer Anmerkung auffordern, es sei denn, Sie haben auch die Option -m verwendet, um eine Nachricht zu übermitteln.
  • Wenn Sie git tag -a -m <msg> <tagname> markiert Git den Commit und versieht ihn mit der angegebenen Nachricht.
  • Wenn Sie git tag -m <msg> <tagname> verhält sich Git so, als hätten Sie das Flag -a für Annotation übergeben und verwendet die angegebene Nachricht.

Im Grunde genommen geht es nur darum, ob das Tag mit einer Anmerkung und anderen Informationen versehen werden soll oder nicht.

320voto

Verschieben Sie kommentierte Tags, halten Sie leichtgewichtige Tags lokal

man git-tag dit :

Kommentierte Tags sind für die Veröffentlichung gedacht, während leichtgewichtige Tags für private oder temporäre Objektkennzeichnungen gedacht sind.

Und bestimmte Verhaltensweisen unterscheiden sich so voneinander, dass diese Empfehlung nützlich ist, z. B:

  • kommentierte Tags können eine andere Nachricht, einen anderen Ersteller und ein anderes Datum enthalten als die Übertragung, auf die sie verweisen. Sie können sie also verwenden, um eine Version zu beschreiben, ohne einen Release-Commit zu machen.

    Leichtgewichtige Tags haben diese zusätzlichen Informationen nicht und brauchen sie auch nicht, da Sie sie nur für die eigene Entwicklung verwenden werden.

  • git push --follow-tags wird nur kommentierte Tags verschieben

  • git describe ohne Kommandozeilenoptionen sieht nur kommentierte Tags

Interne Unterschiede

  • sowohl leichtgewichtige als auch kommentierte Tags sind eine Datei unter .git/refs/tags die ein SHA-1 enthält

  • für leichtgewichtige Tags verweist das SHA-1 direkt auf eine Übertragung:

    git tag light
    cat .git/refs/tags/light

    gibt dasselbe aus wie das SHA-1 des HEAD.

    Kein Wunder also, dass sie keine anderen Metadaten enthalten können.

  • annotierte Tags verweisen auf ein Tag-Objekt in der Objektdatenbank.

    git tag -as -m msg annot
    cat .git/refs/tags/annot

    enthält das SHA des kommentierten Tag-Objekts:

    c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef

    und dann können wir seinen Inhalt mit bekommen:

    git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef

    Musterausgabe:

    object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
    type commit
    tag annot
    tagger Ciro Santilli <your@mail.com> 1411478848 +0200
    
    msg
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.11 (GNU/Linux)
    
    <YOUR PGP SIGNATURE>
    -----END PGP SIGNAT

    Und so enthält sie zusätzliche Metadaten. Wie wir in der Ausgabe sehen können, sind die Metadatenfelder:

    Eine ausführlichere Analyse des Formats finden Sie unter: Was ist das Format eines Git-Tag-Objekts und wie berechnet man dessen SHA?

Boni

  • Feststellen, ob ein Tag mit Anmerkungen versehen ist:

    git cat-file -t tag

    Ausgänge

    • commit für Leichtgewichte, da es kein Tag-Objekt gibt, verweist es direkt auf die Übergabe
    • tag für "annotated", da es in diesem Fall ein Tag-Objekt gibt
  • Nur leichtgewichtige Tags auflisten: Wie kann ich alle leichtgewichtigen Tags auflisten?

63voto

Luis Punkte 2555

Le site groß Unterschied ist perfekt erklärt aquí .

Im Grunde genommen, leichte Anhänger sind lediglich Verweise auf bestimmte Commits. Es werden keine weiteren Informationen gespeichert auf der anderen Seite, kommentierte Tags sind regelmäßige Objekte die einen Autor und ein Datum haben und referenziert werden können, weil sie einen eigenen SHA-Schlüssel haben.

Wenn das Wissen die getaggt was y wenn für Sie relevant ist, dann verwenden Sie kommentierte Tags. Wenn Sie nur einen bestimmten Punkt in Ihrer Entwicklung markieren wollen Egal, wer und wann das getan hat, leichte Etiketten sind gut genug.

Normalerweise würde man sich für kommentierte Tags entscheiden, aber das hängt wirklich vom Git-Master des Projekts ab.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X