webentwicklung-frage-antwort-db.com.de

Gibt es eine Standardbenennungskonvention für Git-Tags?

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

204
troelskn

Version 1.0.0 von Semantic Versioning , von Tom Preston-Werner von GitHub Fame, hatte eine Unterspezifikation und ging auf Folgendes ein:

Kennzeichnungsspezifikation (SemVerTag)

Diese Unterspezifikation MUSS 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 und die freigegebenen Versionen ermitteln.

  1. Wenn Sie Releases in einem Versionskontrollsystem markieren, MUSS das Tag für eine Version "vX.Y.Z" sein, z. "v3.1.0" .

Nach 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 vertiefte sich und führte zu einer neuen Ist "v1.2.3" eine semantische Version?hinzugefügt = an die FAQ in SemVers master Filiale, obwohl zum Zeitpunkt des Schreibens (über 2 Jahre später) diese Änderung noch nicht vorhanden in der offiziell freigegeben spec.

157
peritus

Es scheint zwei vorherrschende Konventionen zu geben (vorausgesetzt, Sie halten sich auch an einen vernünftigen Standard für die Nummerierung der Releases 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 "Berechtigungen" wie der Linux-Kernel und Git benutzt es selbst. (Die erwähnte semantische Versionierung wird verwendet, aber nicht mehr.)

Die Vorteile von 1.2.3 Sind, dass Gitweb oder GitHub automatisch einen Tarball- oder Zip-Download des Formulars packagename-$tag.tar.gz Anbieten können (und ich denke, es ist ziemlich sicher, dass ein Tarball sollte ) nicht genannt werden package-v1.2.3.tar.gz). Alternativ können Sie git describe Direkt verwenden, um Tarball-Versionsnummern zu generieren. Für kleinere Projekte ohne offiziellen Freigabeprozess können diese Möglichkeiten recht praktisch sein. Es ist auch zu beachten, dass die semantische Versionierung keineswegs der einzige oder allgemein akzeptierte Standard für die Versionsnummerierung ist. Bemerkenswerte Projekte wie GNOME und unzählige andere Projekte verwenden die Tag-Benennung 1.2.3.

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


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

101

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

73
Bill Door

Nicht, dass ich davon Wüste.
Git lässt jedoch nicht zu, dass ein Tag und ein Zweig mit demselben Namen gleichzeitig vorhanden sind. Wenn Sie also einen Zweig "1.1" zum 1.1 funktioniert, keinen Tag setzen "1.1 ", verwende zum Beispiel" v1.1 "

16
VonC

Neue Paketmanager raten dazu, Versionen ohne Präfix v zu taggen (wie composer für PHP projects). SemVer 2. hat nichts mit der Tag-Spezifikation zu tun. Es wurde absichtlich durchgeführt, um Konflikte zu vermeiden. Es wird jedoch empfohlen Präfix v in Dokumentations- und Textreferenzen einfügen. Als Beispielformat v1.0.4 statt voll version 1.0.4 oder ver. 1.0.4 ist ausführlich und elegant genug in der Dokumentation.

10
vitalii

Wir verwenden Branches und Tags für release-spezifische Arbeiten, gefolgt von der eigentlichen Veröffentlichung:

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

Jeder Entwickler trifft eine mentale Entscheidung darüber, ob die Arbeit, die er ausführen möchte, nur für den Master geeignet ist oder ob sie auch für die Branche relevant ist. Sie können sehen, dass Änderungen, die an der Verzweigung vorgenommen wurden, auf dem Master wieder zusammengeführt werden. Einige Änderungen auf dem Master werden jedoch nie auf der Verzweigung übernommen (in diesem Beispiel also nicht für die Version 1.6 vorgesehen).

Wenn wir bereit sind, es freizugeben, markieren wir es und führen es ein letztes Mal wieder zusammen. Wir benennen das Tag mit demselben Namen wie die Verzweigung, aber mit einem zusätzlichen Bezeichner darüber, um welche bestimmte Version es sich handelt, z. "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
6
John Feminella

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

VERSION = `git describe --tags`

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

6
Jörg W Mittag

Es gibt keine eine bewährte Methode, die mir bekannt ist. Hier sind einige Links:

Im Allgemeinen wird die Versionierung (0.0.1, v0.2.1, ...) möglicherweise Hand in Hand mit einer Problemverfolgung könnte ein plausibler Ansatz angesehen werden. (.. obwohl ich normalerweise v-vorangestellte Tag-Namen verwende .. siehe auch @VonC answer)

1
miku