Gibt es eine Standard-Namenskonvention für Git-Tags? [geschlossen]


229

Ich habe viele Projekte gesehen, die v1.2.3als Namenskonvention für Tags in git verwendet wurden. Ich habe auch eine Verwendung gesehen 1.2.3. Gibt es einen offiziell anerkannten Stil oder gibt es gute Argumente dafür?


19
Mit 43 Upvotes und Zählungen frage ich mich, ob diese sehr wertvolle Frage umformuliert und wieder geöffnet werden könnte, wobei eine Antwort alle Punkte in einer schönen Zusammenfassung zusammenfasst und ganz oben steht. @ PeterEisentraut's scheint das vollständigste zu sein; wohingegen der akzeptierte Antwort-Geldautomat etwas irreführend erscheint. (Ich denke, ich werde v1.2.3 selbst für Tags verwenden, nachdem ich alle Punkte gelesen habe.)
HostileFork sagt, vertraue SE

1
SO dient zum Fixieren von Code. Best Practices scheinen auf softwareengineering.stackexchange.com oder codereview.stackexchange.com
Cees Timmerman

Werfen Sie einen Blick auf semver.org (semantische Versionierung), der Ihnen einige Ideen geben sollte.
vonbrand

Meine Erfahrung zeigt mir, dass ich ein etwas anderes Schema verwenden soll. 1. Unterverzeichnis: Ein Git- Tag sollte mindestens mit beginnen, v/da dies Tags in einem Namespace gruppiert. 2. Idealerweise sollte ein Tag auch ein Akronym enthalten, das die App eindeutig identifiziert. zB v/myapp/1.0. Dies erleichtert das Zusammenführen des Git-Repositorys: Wenn Apps zusammengeführt werden, kollidieren Tags nicht im Tag-Namespace.
Axd

Antworten:


166

Version 1.0.0 von Semantic Versioning von Tom Preston-Werner von GitHub Fame hatte eine Unterspezifikation, die sich mit diesem Thema befasste:

Tagging-Spezifikation (SemVerTag)

Diese Unterspezifikation SOLLTE verwendet werden, wenn Sie ein Versionskontrollsystem (Git, Mercurial, SVN usw.) zum Speichern Ihres Codes verwenden. Mit diesem System können automatisierte Tools Ihr Paket überprüfen und die SemVer-Konformität sowie die freigegebenen Versionen ermitteln.

  1. Beim Markieren von Releases in einem Versionskontrollsystem MUSS das Tag für eine Version "vX.YZ" sein, z . B. "v3.1.0" .

Nach der Diskussion wurde dies jedoch entfernt und ist in der neuesten Version der SemVer-Spezifikation (2.0.0 zum Zeitpunkt des Schreibens) nicht mehr vorhanden . Ein späterer Diskussionsthread an derselben Stelle ging tiefer und führte zu einer neuen Ist "v1.2.3" eine semantische Version? wird zu den FAQ in der SemVer- Filiale hinzugefügtmaster , obwohl diese Änderung zum Zeitpunkt des Schreibens (über 2 Jahre später) in der offiziell veröffentlichten Spezifikation noch nicht vorhanden ist.


9
Danke - das ist sehr nah. Ich wünschte, er hätte sich qualifiziert, warum der da vsein sollte.
Troelskn

3
@troelskn @mojombo == Tom Preston-Werner
Peritus


41
Die semantische Versionierung 1.0.0 verwendet das Format "v1.2.3". Die semantische Versionierung 2.0.0-rc.1 verwendet wahrscheinlich das Format "1.2.3". Der Artikel zur Tagging-Spezifikation (SemVerTag) wurde aus den Spezifikationen entfernt. Mehr hier: semver.org
petrnohejl

9
Diese Antwort erfolgt, wenn ein alter Semver (Version 1.0) vorhanden ist. Heutzutage wurde das Präfix 'v' aus semver v2.0 entfernt. Für Details siehe Beitrag unten.
vitalii

111

Es scheint zwei dominierende Konventionen zu geben (vorausgesetzt, Sie halten sich auch an einen vernünftigen Standard für die Nummerierung der Veröffentlichungen selbst):

  • v1.2.3
  • 1.2.3

Die Vorteile von v1.2.3sind, dass die Git-Dokumentation (und auch die Mercurial-Dokumentation) dieses Format in ihren Beispielen verwendet und dass mehrere "Autoritäten" wie der Linux-Kernel und Git selbst es verwenden. (Die erwähnte semantische Versionierung verwendete sie früher, aber nicht mehr.)

Die Vorteile von 1.2.3sind, dass gitweb oder GitHub automatisch einen Tarball- oder Zip-Download des Formulars anbieten können packagename-$tag.tar.gz(und ich denke, es ist ziemlich erwiesen , dass ein Tarball nicht benannt werden sollte package-v1.2.3.tar.gz). Alternativ können Sie git describedirekt Tarball-Versionsnummern generieren. Für leichte Projekte ohne formellen Freigabeprozess können diese Möglichkeiten sehr praktisch sein. Es sollte auch beachtet werden, dass die semantische Versionierung keineswegs der einzige oder allgemein akzeptierte Standard für die Versionsnummerierung ist. Bemerkenswerte Projekte wie GNOME sowie unzählige andere Projekte verwenden die 1.2.3Tag-Benennung.

Ich denke, es ist wahrscheinlich zu spät, um diese Positionen zu festigen. Seien Sie wie immer konsequent und sinnvoll.


Update: Wie in diesem Kommentar erwähnt, bietet GitHub jetzt einen Tarball-Namen an, bei dem das 'v' vom Tag entfernt ist.


13
In Bezug auf GitHub und Tarball-Generierung: Es ist nicht mehr relevant. Sie entfernen das 'v' vom Tag.
Hermann Bier

6
Das Präfix 'v' ist auch sehr nützlich, wenn Tags in alphabetischer Reihenfolge sortiert werden. Möglicherweise sind auch andere Tags vorhanden. ob offiziell in einem Master-Repository oder um die Arbeit eines Entwicklers lokal zu verfolgen. Mit 'v'-Präfixen bilden die Release-Tags eine eigene Gruppe, anstatt über den Rest des Namespace verteilt zu sein.
Robie Basak

1
Die Antwort wurde aktualisiert, um zu berücksichtigen, dass SemVer sie nicht mehr verwendet v.
Adam Spires

80

Der Grund für das vorhergehende 'v' ist historisch. Ältere SCCS (cvs, rcs) konnten nicht zwischen einer Tag-ID und einer Revisionsnummer unterscheiden. Tag-IDs durften nicht mit einem numerischen Wert beginnen, damit Revisionsnummern erkannt werden konnten.


5
+1: Gute erste Antwort und ein Name aus einem meiner Lieblingsbücher :-) Vielleicht ist Ihre nächste Antwort jedoch eine aktuellere Frage.
Johnsyweb

1
... aber wenn dies nur für ältere SVCS gilt, was ist, wenn der Sinn dieser Antwort auf eine Frage zum modernen Git ist?
MestreLion

3
Dies ist immer noch nützlich in Git, so dass Sie leicht Versions-Tags von anderen Arten von Tags unterscheiden können (Tags sind für viele andere Dinge nützlich)
Benja

19

Nicht, dass ich davon Wüste.
Git lässt jedoch nicht zu, dass ein Tag und ein Zweig mit demselben Namen gleichzeitig verwendet werden. Wenn Sie also einen Zweig " 1.1" für 1.1Werke haben, setzen Sie kein Tag " 1.1", verwenden Sie beispielsweise " v1.1".


8
Verwendung für Zweige 1.1.x. Das ist es.
vitalii

1
schöner Fang, danke.
RY

10

Neue Paketmanager empfehlen, Versionen ohne Präfix zu kennzeichnen v(wie Composer für PHP-Projekte). SemVer 2.0 hat nichts mit der Tag-Spezifikation zu tun. Dies geschieht absichtlich, um Konflikte zu vermeiden. Es wird jedoch empfohlen , Präfixe vin Dokumentationen und Textreferenzen hinzuzufügen . Als Beispielformat v1.0.4statt voll version 1.0.4oder ver. 1.0.4ausreichend ausführlich und elegant in der Dokumentation.


22
"Es wird empfohlen, ..." Von wem empfohlen, und wo können wir diesen Rat in seinem ursprünglichen Kontext sehen?
Bignose

8

Wir verwenden Zweige und Tags für die Release-spezifische Arbeit, gefolgt von der eigentlichen Version:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

Jeder Entwickler trifft eine mentale Entscheidung darüber, ob die Arbeit, die er begehen möchte, nur für den Master gilt oder ob sie auch für die Branche relevant ist. Sie können sehen, dass Änderungen, die am Zweig vorgenommen wurden, wieder auf dem Master zusammengeführt werden, aber einige Änderungen am Master werden niemals auf dem Zweig übernommen (dh diejenigen, die in diesem Beispiel nicht für die Version 1.6 vorgesehen sind).

Wenn wir zur Veröffentlichung bereit sind, markieren wir es und führen es ein letztes Mal wieder zusammen. Wir benennen das Tag mit demselben Namen wie der Zweig, aber mit einer zusätzlichen Kennung für die jeweilige Version, z. B. "1.6-Release". oder "1,6-beta" oder "1,6-rc2" usw.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release

Danke - das ist eine gute Antwort, um zu beschreiben, wie Sie verzweigen, aber ich habe eigentlich nur gemeint, ob es einen bestimmten (technischen) Grund für die Verwendung eines bestimmten Namensschemas in git gibt. Ich gebe dir trotzdem eine positive Bewertung für die schönen Diagramme;)
troelskn

Ah, gotcha! Entschuldigen Sie das Missverständnis Ihrer Frage. Nein, es gibt keinen bestimmten technischen Grund für die Verwendung eines bestimmten Namens außer der menschlichen Kommunikation. Sie können Ihre Zweige und Tags so ziemlich nach Belieben benennen.
John Feminella

Ihr Release-1.6-Zweig heißt "1.6-Zweig"? Ich dachte, Leerzeichen werden in Filialnamen nicht unterstützt.
Cees Timmerman

8

Ich kenne keine Standards. Ich wähle einfach meine Tag-Namen so, dass ich ein kleben kann

VERSION = `git describe --tags`

in meinen Build-Skripten. Die Tag-Namenskonvention hängt also tatsächlich von der Versionsnamenkonvention des Projekts ab.


1
git beschreiben --tags:>
Damien Carol

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.