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?
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.)
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.
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.
Beim Markieren von Releases in einem Versionskontrollsystem MUSS das Tag für eine Version "vX.YZ" sein, z . B. "v3.1.0" .
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.
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.
+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".
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.
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.
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.
Im Allgemeinen Versionsverwaltung ( 0.0.1, v0.2.1, ...) vielleicht Hand in Hand mit einigem Problem-Tracking eines plausibler Ansatz in Betracht gezogen werden könnte. (.. obwohl ich normalerweise v-präfixierte Tag-Namen verwende .. siehe auch @VonC Antwort)
v/
da dies Tags in einem Namespace gruppiert. 2. Idealerweise sollte ein Tag auch ein Akronym enthalten, das die App eindeutig identifiziert. zBv/myapp/1.0
. Dies erleichtert das Zusammenführen des Git-Repositorys: Wenn Apps zusammengeführt werden, kollidieren Tags nicht im Tag-Namespace.Antworten:
Version 1.0.0 von Semantic Versioning von Tom Preston-Werner von GitHub Fame hatte eine Unterspezifikation, die sich mit diesem Thema befasste:
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ügt
master
, obwohl diese Änderung zum Zeitpunkt des Schreibens (über 2 Jahre später) in der offiziell veröffentlichten Spezifikation noch nicht vorhanden ist.quelle
v
sein sollte.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.3
sind, 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.3
sind, dass gitweb oder GitHub automatisch einen Tarball- oder Zip-Download des Formulars anbieten könnenpackagename-$tag.tar.gz
(und ich denke, es ist ziemlich erwiesen , dass ein Tarball nicht benannt werden solltepackage-v1.2.3.tar.gz
). Alternativ können Siegit describe
direkt 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 die1.2.3
Tag-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.
quelle
v
.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.
quelle
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ür1.1
Werke haben, setzen Sie kein Tag "1.1
", verwenden Sie beispielsweise "v1.1
".quelle
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äfixev
in Dokumentationen und Textreferenzen hinzuzufügen . Als Beispielformatv1.0.4
statt vollversion 1.0.4
oderver. 1.0.4
ausreichend ausführlich und elegant in der Dokumentation.quelle
Wir verwenden Zweige und Tags für die Release-spezifische Arbeit, gefolgt von der eigentlichen Version:
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.
quelle
Ich kenne keine Standards. Ich wähle einfach meine Tag-Namen so, dass ich ein kleben kann
in meinen Build-Skripten. Die Tag-Namenskonvention hängt also tatsächlich von der Versionsnamenkonvention des Projekts ab.
quelle
Es gibt keine eine beste Praxis , die ich bewusst bin. Hier sind einige Links:
Im Allgemeinen Versionsverwaltung (
0.0.1
,v0.2.1
, ...) vielleicht Hand in Hand mit einigem Problem-Tracking eines plausibler Ansatz in Betracht gezogen werden könnte. (.. obwohl ich normalerweisev
-präfixierte Tag-Namen verwende .. siehe auch @VonC Antwort)quelle