In den folgenden Zeilen:
$ git tag -n1
v1.8 Tagged the day before yesterday
v1.9 Tagged yesterday
v2.0 Tagged today
$ git describe
v1.9-500-ga6a8c67
$
Kann jemand erklären, warum das v2.0-Tag nicht von "git description" verwendet wird und wie dies behoben werden kann? Das v2.0-Tag ist bereits gepusht, daher kann ich es wohl nicht einfach löschen und erneut hinzufügen.
git
git-tag
git-describe
Knipknap
quelle
quelle
Antworten:
git describe
Verwendet standardmäßig nur kommentierte Tags. Geben Sie die--tags
Option an, damit auch Lightweight-Tags verwendet werden.Stellen Sie sicher, dass Sie das richtige Commit (
git rev-parse HEAD
) ausgecheckt haben . Kommentierte Tags werden mit erstelltgit tag -a
. Wenn Sie dies tungit show <tagname>
und nur das Commit sehen, handelt es sich um ein leichtes Tag. Wenn Sie eine zusätzliche Tag-Nachricht sehen, handelt es sich um ein mit Anmerkungen versehenes Tag.quelle
--all
, alle Refs zu verwenden. wird HEAD durch das Tag beschrieben? (nur um sicher zu gehen)HEAD
ist das aktuell ausgecheckte Commit.git rev-parse HEAD
) ausgecheckt haben. Stellen Sie außerdem sicher, dass Sie die neueste Version von git verwenden. Kommentierte Tags werden mit erstelltgit tag -a
. Wenn Sie dies tungit show <tagname>
und das Commit sehen, handelt es sich um ein leichtes Tag. Wenn Sie eine Tag-Nachricht sehen, handelt es sich um ein mit Anmerkungen versehenes Tag.Als uns dies passiert ist, wurden zwei Tags für dasselbe Commit angewendet. Ob dies der Fall ist, können Sie durch Ausführen feststellen
Hier gibt es zwei Tags, eines für Version 19 und eines für 20. 20 wurde nach 19 markiert, jedoch für dasselbe Commit. In diesem Fall beschreiben zurückgegeben
Ich weiß nicht, warum es das getan hat, aber so scheint es mit doppelten Tags zu funktionieren.
Ein anderer Fall, in dem dies passieren kann, ist, wenn Sie ein Tag in einem Zweig haben, das Ihnen "näher" ist. Dieser Fall wurde in diesem Blogbeitrag erklärt .
quelle
Das Problem besteht darin
git tag
, dass alle Tags in allen Zweigen angezeigt werden, währendgit describe
nur Tags für Commits verwendet werden, die im aktuellen Zweig verfügbar sind .Hier ist ein Beispiel (der Grund, warum ich tatsächlich hierher gekommen bin):
Es zeigt das neueste verfügbare Tag
v0.4.2
, aber dies ist meine Ausgabe vongit describe
:Ich bin auf Entwicklungszweig. Wenn ich in das Protokoll grabe, sehe ich tatsächlich, dass die neuesten Tags im aktuellen Zweig nicht verfügbar sind:
In meinem Fall haben die Entwickler beschlossen, einen neuen Release- Zweig ausschließlich zum Markieren von Releases zu erstellen, was dazu führt, dass der Entwicklungszweig nicht mehr mit den Tags auf dem neuesten Stand ist.
Hoffe das hilft und danke @eis für die Idee beim Überprüfen der Protokolle.
quelle
In Ihrem Beispiel
v1.9
handelt es sich höchstwahrscheinlich um ein Tag aus Merge Commit.Standardmäßig wird Git-Verhalten erwartet, und Sie können hier mehr darüber lesen: https://git.kernel.org/pub/scm/git/git.git/commit/?id=80dbae03
Um Zusammenführungs-Tags zu ignorieren, wenn Sie nach den neuesten im aktuellen Zweig suchen, können Sie die
--first-parent
Option verwenden.- Erster Elternteil
Befolgen Sie nur das erste übergeordnete Commit, wenn ein Merge-Commit angezeigt wird. Dies ist nützlich, wenn Sie keine Tags für Zweige abgleichen möchten, die im Verlauf des Ziel-Commits zusammengeführt wurden.
Ref: https://git-scm.com/docs/git-describe
quelle