Was genau ist die Build-Nummer in MAJOR.MINOR.BUILDNUMBER.REVISION

55

Was ich über Build-Nummern denke, ist, dass jedes Mal, wenn ein neuer nächtlicher Build erstellt wird, eine neue BUILDNUMBER generiert und diesem Build zugewiesen wird. Für meine 7.0-Versionsanwendung lauten die nächtlichen Builds also 7.0.1, 7.0.2 usw. Ist es so? Was nützt dann eine REVISION nach der Build-Nummer? Oder wird der REVISION-Teil nach jedem nächtlichen Build erhöht? Ich bin hier etwas verwirrt ... bezeichnen wir jeden nächtlichen Bau als GEBÄUDE ?

Das Format wird hier erwähnt: AssemblyVersion - MSDN

A9S6
quelle
Dann könnten Sie das Datum als Build-Nummer verwenden!
2
Build: Jeder neue Build des Systems, Revision: Hotfix oder "Revision" eines veröffentlichten Builds, daher ändert es die Build-Version; Ihr aktueller Build ist möglicherweise 2.2.12.0, aber der veröffentlichte Build ist möglicherweise 2.2.8.0, und wenn Sie diesen Hotfix benötigen, ziehen Sie den Quellcode für 2.2.8, überarbeiten ihn und erstellen 2.2.8.1, der 3 Monate später aktuell ist 2.2.16.0 aber ein Kunde ist immer noch auf 2.2.8.1 und stößt auf einen anderen Fehler. Sie ziehen den Code für 2.2.8.1 und überarbeiten ihn, um den Fehler zu beheben, und veröffentlichen ihn als 2.2.8.2
Jimmy Hoffa,

Antworten:

57

Ich habe es noch nie so geschrieben gesehen. Wo ich arbeite, verwenden wir das Formular MAJOR.MINOR.REVISION.BUILDNUMBER, auf dem MAJOR eine Hauptversion ist (normalerweise viele neue Funktionen oder Änderungen an der Benutzeroberfläche oder dem zugrunde liegenden Betriebssystem), MINOR eine Nebenversion (möglicherweise einige neue Funktionen) Bei einer früheren Hauptversion handelt es sich bei REVISION in der Regel um einen Fix für eine frühere Nebenversion (keine neue Funktionalität), und BUILDNUMBER wird für jeden neuesten Build einer Revision inkrementiert.

Beispielsweise kann eine Revision für die Qualitätssicherung freigegeben werden, und sie weist ein Problem auf, das geändert werden muss. Der Fehler wurde behoben und mit derselben REVISIONSNUMMER, aber einer erhöhten BUILDNUMBER, an QA zurückgesendet.

Tcrosley
quelle
+1: So habe ich es auch überall gesehen. Ich habe gesehen und gemocht, wie einige Unternehmen einfach einen DateTime-Stempel für die BUILDNUMBER verwenden.
Steven Evers
4
+1: Das Formular "MAJOR.MINOR.REVISION.BUILDNUMBER" ist verständlich und sinnvoll. Ich habe das BUILDNUMBER.REVISION-Formular auf der MSDN-Site gesehen (Link in Frage aktualisiert) und es hat mich total verwirrt.
A9S6
1
Ungerade. Ich würde erwarten, dass die letzte Überarbeitung am sinnvollsten ist - es ist die Zahl, die sich (wahrscheinlich) am meisten ändert.
Izkata
1
@Izkata, tatsächlich ändert sich die Build-Nummer am meisten, zumindest die Art und Weise, wie wir sie derzeit bei meinem Hauptvertrag verwenden, bei dem eine strenge Versionskontrolle angewendet wird, da wir medizinische Geräte herstellen. Eine aktualisierte Version weist darauf hin, dass ein Fix für die vorherige Software vorhanden ist, der von QA (Quality Assurance) getestet werden muss. Dies ist eine völlig separate Abteilung, die drei Tage lang umfangreiche Tests durchführt (gemäß den FDA-Richtlinien). Wenn sie Probleme finden, sind möglicherweise zusätzliche Codeänderungen erforderlich, die ein neues Build (erneutes Kompilieren und Verknüpfen) und ein erneutes Testen erfordern. Die Versionsnummer bleibt jedoch gleich.
Tcrosley
@tcrosley Ich denke, es ist ein Fall von unklarer Terminologie. Ich dachte an Revisionen in der Versionskontrolle.
Izkata
19

Die ganze Verwirrung rührt von der unterschiedlichen Semantik her , die MS für "Build-Nummer" und insbesondere "Revision" verwendet. Die Begriffe bedeuten nur verschiedene Dinge.

Die meisten Leute (ich selbst eingeschlossen) verwenden ein semantisches Versionsnummerierungsschema, bei dem Sie immer dann eine höhere BUILD-Nummer erhalten, wenn Sie aus irgendeinem Grund einen neuen Build erstellen müssen. Für uns ist ein Hotfix nur eine weitere Codeänderung, und der BUILD-Teil wird bei jedem CI-Lauf automatisch erhöht. Module mit demselben MAJ.MIN.REV gelten als austauschbar, und der BUILD teilt Ihnen mit, welches das jüngste ist.

Inkrementelle REVISION weist jedoch auf einen neuen Zweig für permanente Releases hin. Deshalb stellen wir ihn vor BUILD. Der Nachteil dieses Ansatzes ist, dass wir möglicherweise die folgende Abfolge von Ereignissen erhalten:

  • Festschreibungsnummer 4711: Alice hat Feature A hinzugefügt
  • CI erstellt Build 1.2.3.100
  • Festschreibungsnummer 4712: Bob hat Merkmal B geändert
  • Festschreibungsnummer 4713: Alice hat Feature A (den "Hotfix") behoben
  • CI erstellt Build 1.2.3.101

Major.Minor.Revision.build

Wie Sie sehen können, ist der Hotfix nicht die einzige Änderung, die im nächsten Build enthalten ist, auch Bobs Modifikation wird Teil dieses Builds. Wenn Sie den aktuellen Zweig stabilisieren möchten, können Sie in Schwierigkeiten geraten, da Sie nie sicher sein können, ob Bob gerade eine Reihe von Fehlern hinzugefügt hat oder nicht.

MS verwendet beide Begriffe unterschiedlich. Die BUILD-Nummer wird nicht automatisch erhöht, sondern kann als Freigabezweig betrachtet werden, um den für eine bestimmte Version des Codes verwendeten Code einzufrieren. Die REVISION zeigt zusätzliche "Hot" -Änderungen an, die auf diesen BUILD-Zweig angewendet wurden. Die Reihenfolge wäre also wie folgt:

  • Festschreibungsnummer 4711: Alice hat Feature A zu Trunk / Master hinzugefügt
  • Carl schafft Zweig bauen 1.2.100
  • CI erstellt Build 1.2.100.0
  • Festschreibungsnummer 4712: Bob hat Feature B in Trunk / Master geändert
  • Festschreibungsnummer 4713: Alice hat Feature A im 1.2.100Zweig behoben
  • CI erstellt Build 1.2.100.1

Major.Minor.build.Revision

Der Begriff REVISION kann sich auf beziehen

  • eine Produktrevision (so verwenden es die meisten Leute)
  • eine Überarbeitung eines bestimmten täglichen Builds (genau das macht MS)

Der Hauptunterschied zwischen den beiden Prozessen besteht darin, ob Sie Hotfixes auf CI-Builds anwenden möchten oder nicht und an welcher Stelle des Prozesses die Verzweigung vorgenommen wird. Dieser Aspekt wird wichtig, wenn Sie in der Lage sein möchten, nach erfolgreichem Test jederzeit einen bestimmten Build auszuwählen und genau diese Version auf die nächste offizielle Version Ihres Produkts zu übertragen.

In unserem Fall erstellt das CI-Tool ein Repository-Tag, sodass wir bei Bedarf immer die erforderlichen Informationen zur Verfügung haben. Mit SVN wird es noch einfacher, da Tags und Verzweigungen genauso implementiert werden - ein Tag ist nichts anderes als eine Verzweigung, unter der sich befindet /tags.

Siehe auch

Aus dem FAQ-Bereich der TFS-Verzweigungsstrategie :

In welchem ​​Zweig soll ich das P1-Ticket (Hotfix-Ticket) reparieren?

  • Das P1 sollte in dem Zweig festgelegt werden, der der in Production ausgeführten Codebasis am nächsten liegt. In diesem Fall sollte das P1 im Zweig Prod fixiert werden. Wenn Sie den Fix in einem anderen Zweig anwenden und die Änderungen in der Produktion übernehmen, besteht die Gefahr, dass Sie halbfertigen oder nicht getesteten Code aus den nachfolgenden Iterationen freigeben.

  • Nun können Sie sich darüber streiten, ob es sicher ist, direkt gegen den Prod-Zweig zu arbeiten. Denken Sie noch einmal darüber nach, dass ein P1, der sofortige Aufmerksamkeit erfordert, kein grundlegendes Problem im System sein sollte. Wenn es sich um ein grundlegendes Problem handelt, sollte es zum Product Backlog hinzugefügt werden, da dies möglicherweise eine weitere Analyse und Diskussion mit dem Kunden erfordert.

Eine weitere gute Lektüre ist die TFS-Verzweigungsanleitung

JensG
quelle
Das ist eine großartige Antwort! +1
Lankymart
16

Microsoft beschreibt den Zweck jeder Komponente einer .NET-Versionsnummer in der MSDN-Dokumentation für die VersionKlasse. Hier ist der relevante Teil:

major.minor [.build [.revision]]

Die Komponenten werden standardmäßig wie folgt verwendet:

Haupt: Baugruppen mit demselben Namen, aber verschiedenen Hauptversionen sind nicht austauschbar. Eine höhere Versionsnummer weist möglicherweise auf eine umfassende Umschreibung eines Produkts hin, bei der keine Abwärtskompatibilität angenommen werden kann.

Nebenversion: Wenn der Name und die Hauptversionsnummer auf zwei Assemblys identisch sind, die Nebenversionsnummer jedoch unterschiedlich ist, weist dies auf eine erhebliche Verbesserung mit dem Ziel der Abwärtskompatibilität hin. Diese höhere Nebenversionsnummer weist möglicherweise auf eine Einzelversion eines Produkts oder eine vollständig abwärtskompatible neue Version eines Produkts hin.

Build: Ein Unterschied in der Build-Nummer stellt eine Neukompilierung derselben Quelle dar. Es können unterschiedliche Build-Nummern verwendet werden, wenn der Prozessor, die Plattform oder der Compiler geändert werden.

Revision: Baugruppen mit demselben Namen, Haupt- und Nebenversionsnummern, aber unterschiedlichen Revisionen sollen vollständig austauschbar sein. In einem Build, der eine Sicherheitslücke in einer zuvor freigegebenen Assembly behebt, wird möglicherweise eine höhere Revisionsnummer verwendet.

http://msdn.microsoft.com/en-us/library/system.version.aspx

Cole Campbell
quelle
9
Es wundert mich, warum niemand diesen Standard kennt. Jede Antwort hier, die behauptet, dass Builds enden, und versteht nicht, dass Überarbeitungen sehr einfach sind. es bedeutet Hotfix. Sie geben einen Build frei und erstellen dann weitere Builds. Wenn Sie jedoch diesen Release reparieren müssen, aktualisieren Sie die Revision, um anzuzeigen, dass der jeweilige freigegebene Build für einen neuen Release geändert wurde
Jimmy Hoffa,
2
+1 für eine Antwort mit einer berechtigten Build-Nummer. Das bloße Erhöhen der Zahl ist ziemlich nutzlos, wenn die Revision gleich bleibt (es sei denn, Sie haben ein verrücktes Build-System, das zeitabhängig ist). Mit Hilfe der Build - Nummer , um zu signalisieren , welchen Compiler, Plattformen, etc. ist nützlich.
Thomas Eding
1
Buildda recompilation of the same sourcescheint ein wichtiger punkt zu sein, der übersehen wird. Wenn es sich um eine Codeänderung handelt (für die keine ganz neue Major / Minor-Erhöhung erforderlich ist), Revisionmuss auch die geändert werden.
PeterX
@PeterX Wie bei build-spezifischen Änderungen beim Re-Targeting?
Samis
4

Es gibt mindestens ein paar verschiedene Dinge, die ich mir als Referenz für die Build-Nummer vorstellen könnte:

  1. Version der Versionsverwaltung, die veröffentlicht wurde. Wenn zum Beispiel die Version 12345 veröffentlicht wurde, kann dies anhand der Build-Nummer nachverfolgt werden, und wenn sie gepatcht ist, werden möglicherweise Revisionen veröffentlicht, da es sich nicht um neue Funktionen handelt, mit denen die Haupt- oder Nebenversionen erweitert werden und die Build-Nummer muss gespeichert werden, falls jemand diesen Build erneut ausführen möchte.

  2. Continuous Integration Server-ID. In diesem Fall nummeriert der CI-Server möglicherweise jeden Build, den er ausführt. Daher wird die Build-Nummer für einen erfolgreichen Build verwendet und der Revisionsteil wird in diesem Szenario nicht benötigt.

Es mag andere geben, die ich nicht kenne, aber diese sind die großen, die ich kenne, wenn es um Zahlen auf Codebasis geht.

JB King
quelle
4
+1 für # 1. Ich verwende gerne die Versionsverwaltungs-Revision #, da es so viel einfacher ist, Fehler, die gegen diese Version gemeldet wurden, in der Versionsverwaltung nachzuschlagen.
Mason Wheeler
@ MasonWheeler: Funktioniert hervorragend, wenn Sie auf SVN sind. Aber wenn du zu dcvs landest, wird es unruhig. Dies wäre eine Sache, die ich am meisten vermisse.
Wyatt Barnett
3

Eine Build-Nummer wird normalerweise bei jedem Build erhöht, damit sie eindeutig ist.

Der Einfachheit halber sollten einige die Build-Nummer zurücksetzen, wenn die MAJOR- oder MINOR-Nummern angestoßen werden.

Die meisten Continuous Integration-Engines ermöglichen automatisch generierte eindeutige Build-Nummern.


quelle
2

Die Revision kann für Patches der Builds verwendet werden. Nehmen wir an, dass zwei Teams an einem Produkt arbeiten.

Team 1 ist das Hauptentwicklungsteam und erstellt nächtliche Builds mit dem folgenden Versionsschema 1.0.X.0, wobei X inkrementiert wird. Jetzt haben sie Build 1.0.50.0. Team 2 nimmt von Zeit zu Zeit einen Build vor. Nehmen wir an, sie nehmen den Build der letzten Woche, der 1.0.43.0 ist, und beginnen ihn zu verwenden. Team 1 rückt auf 1.0.51.0 vor, wenn Team 2 ein Problem in 1.0.43.0 feststellt.

Jetzt nimmt Team 1 diesen Build (43), behebt das Problem und stellt Team 2 den Build 1.0.43.1 zur Verfügung. Der Fix wird möglicherweise auch im Hauptbuild weitergegeben, sodass die Änderung in 1.0.52.0 angezeigt wird.

Hoffe das ist klar und hilfreich.

* Revision ist nützlich, wenn nicht alle am Projekt Beteiligten den gleichen Build verwenden und Sie bestimmte Builds patchen müssen.

Victor Hurdugaci
quelle
2

Lassen Sie mich nur sagen, wie ich es sehe und benutze ...

Programmname Version major.minor.build.revision

major: Für mich ist das das aktuelle Projekt, an dem ich arbeite. Die Nummer ändert sich erst, wenn ich ein neues Projekt mit demselben Programmnamen starte. Dies bedeutet, dass ich buchstäblich ein neues Programm des gleichen Geschlechts schreiben werde (Beispiel: access v1 - access v-2 - access v-3 * alle das gleiche Programm, aber komplett neu geschrieben).

minor: Dies bedeutet, dass ich dem aktuell veröffentlichten Projekt Funktionen hinzufüge. Zum Beispiel habe ich die Möglichkeit hinzugefügt, eine Quittung zu drucken oder Bilder zu importieren. Grundsätzlich möchte ich jetzt zusätzliche Funktionen hinzufügen und nicht auf die nächste Hauptversion warten, um dies zu tun.

build: Hiermit zeige ich sehr kleine Änderungen in der veröffentlichten major.minor-Version an. Dies kann eine Änderung des Layouts, des Farbschemas usw. sein.

Revision: Dies wird verwendet, um eine Fehlerbehebung im aktuell veröffentlichten major.minor.build anzuzeigen. - Es gibt Fälle, in denen ich das aktuelle Projekt nicht weiterentwickle und ein Fehler auftritt. Dieser Fehler muss behoben und veröffentlicht werden. Es bedeutet nur, dass ich das, was ich bereits veröffentlicht habe, korrigiere, damit es richtig funktioniert. Ich würde dies auch verwenden, wenn ich an einem neuen Build, einer neuen Ergänzung oder einer neuen Hauptversion arbeite. Die veröffentlichte Version muss natürlich gepatcht werden, während wir auf die nächste Haupt-, Neben- oder Build-Version warten.

Auf diese Weise kann ein fertiggestelltes oder blockiertes Projekt bis zur Veröffentlichung der nächsten Version repariert und nutzbar gemacht werden.

Ich hoffe, dies gibt jemandem ein besseres Verständnis dafür, wie diese Art der Versionierung funktionieren würde (oder sollte). Für mich ist es die einzige Definition und Praxis, die bei dieser Art der Versionierung wirklich Sinn macht.

Richard Rindom
quelle
1

Ich habe nur eine Build-Nummer als letzte Nummer in der Release-ID gesehen. Ich bin mir nicht sicher, wie Sie zu einer Revision einer Build-Nummer kommen würden. Ich nehme an, dass Sie einige der nicht erstellten Ressourcen (Symbole, DB-Skript usw.) geändert haben, aber die meisten Projekte, an denen ich in letzter Zeit gearbeitet habe, haben all diese Dinge ebenfalls unter Versionskontrolle, sodass der Erstellungsprozess sie abruft, wenn Installer / Release erstellen. Ich mag Build-Nummern mit Zeitstempel, obwohl nicht ganz so, wie @David es beschreibt (ich mag major.minor.revision.HHMM). Bei meiner Arbeit verwenden wir jedoch nur eine fortlaufende Nummer, die unser Build-Server generiert.

TMN
quelle
1

Wie bei jkohlhepp verwenden wir den dritten Teil der Version, um die Versionsnummer in SubVersion anzuzeigen, und den vierten, um die Versionsnummer von unserem Continuous Integration Server (für uns Jenkins) anzuzeigen. Dies hat mehrere Vorteile: Wenn die Versionsnummer von unserem CI-Server festgelegt wird, entfällt ein manueller Schritt, der sonst versehentlich übersehen werden könnte. Es ist leicht zu überprüfen, dass ein Entwickler keine freche Version von seinem Entwicklungs-PC erstellt hat (was dazu führen würde, dass diese Zahlen Null sind). und es ermöglicht uns, jede Software auf den Code, aus dem sie generiert wurde, und auf den CI-Job, der sie erstellt hat, zurückzugreifen, indem wir nur die Versionsnummer betrachten - was wir gelegentlich sehr nützlich finden.

Jon Lawson
quelle
0

Es ist was immer du willst. Ich neige dazu, year.month.day.hhmm für meine Major.minor.build.revision zu verwenden. Wenn ich mehr als eine pro Minute produziere, stimmt etwas nicht. Sie können einfach ein einfaches Inkrement verwenden, oder ich habe einige ausgefeilte Generatoren für sie gesehen. Was Sie wollen , es zu sein. Was sie tun müssen, ist, es so zu machen, dass Sie zu der Quelle gelangen, die zum Erstellen dieser Ausgabe verwendet wurde.

BlackICE
quelle
0

Die letzten beiden Ziffern geben die gesamte Build-Nummer an

1.01.2.1234

Die Build-Nummer ist 2.1234, die meisten Leute werden jedoch nur 1234 verwenden, da sich der 2-Teil nicht häufig ändert.

Lance Lyons
quelle
1
Das OP fragt nach der Build-Nummer und nicht nach der Build-Nummer in der Revisions-ID.
Kiamlaluno
0

Unser Team verwendet die dritte Nummer (Revision) als Revisionsnummer aus dem Subversion-Repository. Wir verwenden die vierte Nummer (Build) als Build-Nummer von unserem TeamCity Continuous Integration Server, der den Build tatsächlich erstellt. TeamCity erstellt während des Erstellungsprozesses eine neue AssemblyInfo-Datei mit den richtigen #.

RationalGeek
quelle