Welche Namen sind gültige Git-Tags?

78

Beim Erstellen eines Tags mit [Zeichen wird eine Fehlermeldung angezeigt :

fatal: '[' ist kein gültiger Tag-Name.

Frage: Gibt es Regeln für Tags im Git?

Aik
quelle

Antworten:

107

Sie können überprüfen, ob der Name mit gültig ist

git check-ref-format

Diese Seite enthält die Einschränkungen für einen gültigen Namen. Zitiert von der Seite (möglicherweise in Zukunft veraltet):

  1. Sie können einen Schrägstrich /für die hierarchische (Verzeichnis-) Gruppierung enthalten, aber keine durch Schrägstriche getrennte Komponente kann mit einem Punkt beginnen .oder mit der Sequenz enden .lock.

  2. Sie müssen mindestens eine enthalten /. Dies erzwingt das Vorhandensein einer Kategorie wie heads/, tags/etc. , aber die tatsächlichen Namen sind nicht eingeschränkt. Wenn die --allow-onelevelOption verwendet wird, wird auf diese Regel verzichtet.

  3. Sie können ..nirgendwo zwei aufeinanderfolgende Punkte haben .

  4. Sie dürfen nirgendwo ASCII-Steuerzeichen (dh Bytes mit Werten unter \ 040 oder \ 177 DEL), Leerzeichen, Tilde ~, Caret ^oder Doppelpunkt haben :.

  5. Sie dürfen nirgendwo ein Fragezeichen ?, ein Sternchen *oder eine offene Klammer haben [. In der folgenden --refspec-patternOption finden Sie eine Ausnahme von dieser Regel.

  6. Sie können nicht mit einem Schrägstrich beginnen oder enden /oder mehrere aufeinanderfolgende Schrägstriche enthalten ( --normalizeeine Ausnahme von dieser Regel finden Sie in der folgenden Option).

  7. Sie können nicht mit einem Punkt enden ..

  8. Sie können keine Sequenz enthalten @{.

  9. Sie können nicht das einzelne Zeichen sein @.

  10. Sie können keine enthalten \.

Wie Sie sehen, haben Sie in Ihrem Fall gegen Regel (5) verstoßen.

Mit dem --normalizeFlag können Sie Tags in Bezug auf Schrägstriche normalisieren (sowohl führende als auch aufeinanderfolgende Schrägstriche entfernen):

git check-ref-format --normalize "tags/weird//tag"

Die tags/Teilart, die Sie validieren a tag.

Nach einigen Diskussionen mit @NikosAlexandris können Sie den folgenden Liner schreiben, um das Tag <some-tag>mit Textfeedback zu überprüfen :

git check-ref-format "tags/<some-tag>" && echo "Valid tag" || echo "Invalid tag"
Willem Van Onsem
quelle
Warum sollte Git diese Einschränkungen für Tag-Namen
auferlegen
3
@ user3245268: weil Sie zum Beispiel auf remote/branchoder verweisen können HEAD^1(um das vorletzte Commit des Kopfes zu erhalten) usw. Schließlich ist ein Tag nur ein "spezieller Name" für ein Commit. Um die Referenz zwischen einem Tag, einem entfernten Zweig, einem relativen Pfad usw. eindeutig zu machen, sind die Namen eingeschränkt. Unter Windows können Sie beispielsweise keine Datei benennen .., da der Pfad ../foodann einige schwerwiegende Probleme haben würde. Unix löst dies normalerweise durch Escapezeichen, aber hier werden "Tag Space", "Branch Space" und "Relative Commit Space" "zusammengeführt".
Willem Van Onsem
Regel 2 ist falsch. ZB v1.4ist ein gültiges Tag, das von Version 2.21.0 akzeptiert wird. Siehe Git Basics - Tagging .
Arthur
@Arthur: Nein, da Sie, wie Sie in Ihrer eigenen Dokumentation lesen können, wenn Sie dies so tun, ein Tag mit dem Namen definieren refs/tags/v1.4, beachten Sie, dass git es voranstellt refs/tags/.
Willem Van Onsem
@WillemVanOnsem Der Einfachheit halber müssen die meisten Benutzer Regel 2 nicht befolgen, wenn sie nur ein Tag in GitHub eingeben oder ein Tag mit git verschieben. Also muss ich Arthur vom Standpunkt eines "Laien" aus zustimmen.
Harrison Smith