Git, semantische Versionierung und wie passt sie in (meine) typische Entwicklungszeitleiste?


8

Ich arbeite an einem Q & A-System und bin dabei, meine aktuelle Anwendung mit "1.0.0" für die erste offizielle Version / Tag zu markieren. Als nächstes wird es für Betatests für ein begrenztes Testpublikum eingeführt. Ist "1.0.0" zu diesem Zeitpunkt korrekt?

Zweifellos werden zu diesem Zeitpunkt auch viele Fehler gefunden. Behalte ich es als "1.0.0" bei, aber bewege das Tag gewaltsam, bis es veröffentlicht wird. Oder würde ich beim Beheben der Fehler ein neues Tag "1.0.1" geben. Dann nach einer weiteren Testrunde vielleicht "1.0.2"

Wenn Sie also an Verbesserungen arbeiten (z. B. neue Funktionen wie ein neues Menü, ein neues Sucheingabefeld), sind dies geringfügige Änderungen von "1.0.0" auf "1.1.0"?

Antworten:


7

Sie erwähnen, dass Sie die semantische Versionierung verwenden möchten. Schauen wir uns also die Spezifikation für die semantische Versionierung unter http://semver.org/ an :

Inkrementieren Sie bei gegebener Versionsnummer MAJOR.MINOR.PATCH Folgendes:

  1. MAJOR-Version, wenn Sie inkompatible API-Änderungen vornehmen,
  2. MINOR-Version, wenn Sie Funktionen abwärtskompatibel hinzufügen, und
  3. PATCH-Version, wenn Sie abwärtskompatible Fehlerbehebungen vornehmen.

Zusätzliche Beschriftungen für Pre-Release- und Build-Metadaten sind als Erweiterungen des MAJOR.MINOR.PATCH-Formats verfügbar.

und etwas weiter unten:

Eine Vorabversion kann durch Anhängen eines Bindestrichs und einer Reihe von durch Punkte getrennten Bezeichnern unmittelbar nach der Patch-Version gekennzeichnet werden. Bezeichner MÜSSEN nur ASCII-Alphanumerik und Bindestrich [0-9A-Za-z-] enthalten. Bezeichner dürfen NICHT leer sein. Numerische Bezeichner DÜRFEN KEINE führenden Nullen enthalten. Vorabversionen haben eine niedrigere Priorität als die zugehörige normale Version. Eine Vorabversion zeigt an, dass die Version instabil ist und möglicherweise nicht die beabsichtigten Kompatibilitätsanforderungen erfüllt, die in der zugehörigen normalen Version angegeben sind. Beispiele: 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.

Wenn Sie also eine echte Beta Ihrer 1.0-Version veröffentlichen, sollten Sie diese mit einem Tag versehen 1.0.0-beta(oder ähnlich wie in der Spezifikation angegeben). Wenn Sie mehr Beta - Versionen gehen zu müssen , wie Sie Fehler zu beheben, dann 1.0.0-beta.1, 1.0.0-beta.2usw.

Wenn Sie abwärtskompatible Funktionen hinzufügen, sollten Sie die MINOR-Nummer erhöhen. Wenn Sie viele interne Änderungen vornehmen, die zu Änderungen an anderen Stellen in Ihrer Anwendung führen würden, ist dies eine wichtige Änderung. Wenn Sie weniger dramatische Änderungen vornehmen (z. B. nur Code hinzufügen und das Verhalten des vorhandenen Codes nicht ändern ), ist dies eine geringfügige Änderung. Wenn Sie eine UI-schwere Anwendung haben und diese UI vollständig ändern, würde ich auch sagen, dass dies ebenfalls eine MAJOR-Änderung ist (UI kann als API für Endbenutzer betrachtet werden).

Was , wie Indikatoren zu Ihrem git Repo hinzufügen, würde ich vorschlagen , dass Sie zuerst einen erstellen 1.xZweig. Auf diese Weise können Sie problemlos alles in Version 1 verfolgen und gleichzeitig Version 2 auf Master weiterentwickeln. Dann kennzeichnen Sie die Beta-Version mit einem Tag 1.0.0-beta(oder -beta.1wenn es mehrere Betas geben wird). Wenn Sie alle Fehler behoben haben, die Sie beheben müssen, markieren Sie die tatsächliche 1.0.0Version. Kennzeichnen Sie dann jede Version nach Bedarf.

Sie können sich einige bewährte Workflows für Git wie Git Flow und Github Flow ansehen, um Ideen zu erhalten, wie Sie Ihren laufenden Workflow einrichten möchten.

Wenn Sie mehr Kontext zur semantischen Versionierung für Programme ohne API wünschen, wird diese Antwort ausführlich behandelt.


3

Ja, aktualisieren Sie die Versionsnummer immer dann, wenn sie sich Ihrer Kontrolle entzieht und in die einer anderen Person übergeht.

Der Grund ist, dass Sie nicht wissen müssen, womit sie gearbeitet haben. Wenn der Test zurückkommt und sagt "Wir haben einen Fehler in Version 1.0.0 gefunden", möchten Sie als letztes sagen "Welche Version 1.0.0, die wir Ihnen am Montag gegeben haben oder die aktualisierte, die ich Ihnen am Freitag gegeben habe?" ""

Das Aktualisieren der 3. Nummer ist wirklich dafür ausgelegt. Der Funktionsunterschied zwischen 1.0.0 und 1.0.999 sollte begrenzt sein. Wenn Sie große neue Funktionen hinzufügen, aktualisieren Sie die 2. Nummer. Das Hinzufügen eines neuen Sucheingabefelds zählt jedoch nicht als ausreichend große Änderung, um eine Aktualisierung der zweiten Nummer zu rechtfertigen, sondern YMMV.

Persönlich neige ich dazu, die 2. Nummer nicht so sehr für Feature-Updates zu verwenden, sondern um eine "vollständige Version" zu markieren, dh eine, die getestet und bestanden wurde. Dann aktualisiere ich diesen Wert und wiederhole das Hin und Her zwischen dev und test, wobei ich jedes Mal die 3. Zahl inkrementiere, bis alles vorbei ist.


0

Gute Antworten bereits gegeben, aber ich würde auch einen Weg finden, das git sha1 in Ihre Anwendung aufzunehmen, so dass Sie feststellen können, dass es git commit 1b5619273127398123 war, das in dieser speziellen Version verwendet wurde. Auf diese Weise können Sie, wenn Herr Smith von BigCo anruft und sich beschwert, dass seine App nicht richtig funktioniert, fragen: "Was ist die lange Reihe von Ziffern und Buchstaben in der zweiten Arbeit, wenn Sie auf" Info "klicken?", git checkout NNNNNNUm genau das zu erhalten Version, dann machen Sie die gleichen Schritte wie Herr Smith, und (hoffentlich) reproduzieren Sie das Problem. Es gibt nichts Schlimmeres, als zu versuchen, ein Problem zu finden, das Sie nicht reproduzieren können, weil Sie eine subtil andere Version verwenden (bei der Sie dieses spezielle Problem zufällig oder absichtlich vermeiden).

Stellen Sie außerdem sicher, dass Ihr Build-System in der Version enthalten ist - vorzugsweise einschließlich der Compiler-Version usw. -, entweder codiert oder gespeichert, welche Build-Tools Sie beim Erstellen des Produkts in Ihrem Git-Repo verwenden.

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.