Frage

Meine Firma baut ein Produkt. Es wird von SVN versioniert werden. Es ist eine Webapp so dass im Grunde wird es nie eine Version aus, die nicht einige Funktionen in ihnen hat und somit immer als Beta markiert werden konnte. Aber da es wird ein Corporate Produkt sein, die ich wirklich die „unstable watchout“ nicht wollen dort. Wie würden Sie gehen über die Versionierung? 1,0 stabil? Sollte das Build-Datum in der Versionsnummer sein? Sag mir, was euch denken!

War es hilfreich?

Lösung

[ großen ]. [ Moll ]. [ Release ]. [ bauen ]

große : Wirklich eine Marketing-Entscheidung. Sind Sie bereit, die Version 1.0 zu nennen? Ist die Firma eine große Version dieses für die Kunden haben könnte, mehr zu zahlen, oder ist es ein Update der aktuellen Hauptversion, die frei sein kann? Weniger ein F & E-Entscheidung und eine Produktentscheidung.

minor : Startet von 0, wenn große wird erhöht. +1 für jede Version, die Öffentlichkeit geht.

Release : Jedes Mal, wenn Sie einen Meilenstein in der Entwicklung getroffen und das Produkt freigeben, auch intern (beispiels zu QA), erhöht dies. Dies ist besonders wichtig für die Kommunikation zwischen den Teams in der Organisation. Unnötig zu sagen, lassen Sie nie die gleiche ‚Freisetzung‘ zweimal (auch intern). Zurücksetzen auf 0 auf kleinere ++ oder Haupt ++.

bauen :. Kann eine SVN-Revision sein, finde ich, dass funktioniert am besten

Andere Tipps

x.y.z.g

Schritte in g sind instabil. (Oder RCs) Schritte in z sind stabil und Fehlerbehebung bedeuten.
Schritte in y sind stabil und neue Funktionen bedeuten.
Inkrementen in x stabil sind, Hauptversion ohne 100% Abwärtskompatibilität.

Ich schrieb einmal einen ausgeklügelten „Versionierung Style Guide“ für ein großes Projekt von mir. Das Projekt blieb aus, aber der Style Guide ist noch online verfügbar . Es ist meine persönliche Meinung, ist es vielleicht hilfreich (oder inspirierend) zu Ihnen.

Hüten Sie sich vor, es ist ein langer Text, und geht in die Komponente Versionierung vs. Produkt Versionierung und solche Sachen. Es drückt auch starke Meinungen zu einigen Versionierungssysteme populär in der OSS-Community, aber ich habe sie, so drücke ich ihnen. ; -)

Ich bin nicht einverstanden, die Subversion-Revisionsnummer mit der Verwendung von, zum Beispiel. Vielleicht möchten Sie eine freigegebene Version erhalten, während die Entwicklung in STAMM weiterhin, so dass Sie einen Wartungs Zweig einrichten -. Und Ihre Versionsnummer Versionsverwaltung geht den Bach runter

Edit: Als Zusammenfassung unterscheidet es zwischen Quelldateien Versionierung, Komponenten und das Gesamtprodukt. Es verwendet ein System von separaten x.y versoning für Komponenten und das Produkt, mit einem schönen Interdependenz zwischen den beiden, die Verfolgung macht die Komponentenversion, auf die Produktversion trivial gehört. Er spricht auch darüber, wie Alpha / Beta / Release / Patch-Zyklen zu behandeln, ohne das System zu brechen. Eigentlich ist es eine Vorgehensweise für den gesamten Entwicklungszyklus, so dass Sie vielleicht zu cherry-pick wollen. ; -)

Edit 2: Wie genug Leute meinen Artikel hilfreich fanden dies ein „Nice Antwort“ zu machen, begann ich wieder auf den Artikel zu arbeiten. PDF und LaTeX-Versionen sind ab sofort verfügbar, eine komplette Neufassung einschließlich einer besseren Sprache und erläuternde Grafiken werden folgen, sobald ich die Zeit finden können. Vielen Dank für Ihre Stimme ab!

Holen Sie sich Inspiration aus Wikipedia: "Software Versionierung"

Eine andere "neue" und "relativ beliebte" Option ist Semantische Versionierung

Zusammenfassung:

  

eine Versionsnummer MAJOR.MINOR.PATCH gegeben, erhöhen die:

     
      
  1. MAJOR Version, wenn Sie nicht kompatibel API-Änderungen,
  2. machen   
  3. kleinere Version, wenn Sie Funktionalität in einer rückwärtskompatiblen Weise hinzufügen und
  4.   
  5. PATCH Version, wenn Sie machen rückwärtskompatibel Fehlerbehebung.
  6.   
     

Weitere Etiketten für Pre-Release und bauen Metadaten sind als   Erweiterungen des MAJOR.MINOR.PATCH Format.

a.b.c.d

Stufung: wenn
 - d : Fehlerbehebung
 - c : Wartung, z.B. Leistungsverbesserung
 - b : neue Features
 - a : Architektur ändern

Die obligatorische wird die linke z.B. wenn dort fixiert beispielsweise eine neue Funktion und ein Fehler sind, dann müssen Sie nur erhöhen b .

auf meiner Erfahrung Basierend mit komplexem Enterprise-Plattformebene Abhängigkeitsmanagement und Release-Versions Ich bin gekommen, einen Ansatz Ich mag nennen Halb Semantic Versioning empfehlen.

Im Grunde baut es aus der Semantische Versionierung 2.0 aber nicht ganz so streng.

Halb Semantic Version Segmente:

<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]

Primärmitteilung Segment Format:

  

MARKETTING.MAJOR.MINOR.PATCH

Jedes Segment sollte alphanumerics erlauben, aber rein numerische Werte sind für logische inkrementelle Änderungen empfohlen.

Wie SemVer, empfehle ich Major, Minor und Patch-Komponenten Rückwärtskompatibilität Ebenen zu vertreten, aber ich empfehle auch das Voranstellen einer Marketing Komponente . Dies ermöglicht Produkt Besitzer, Feature Epen / Gruppen und betrifft die primäre Komponente unabhängig von der technischen Kompatibilität Bedenken zu stoßen.

Im Gegensatz zu anderen Antworten, ich eine Build-Nummer an das Hauptsegment anhängen nicht zu empfehlen. Stattdessen fügen Sie ein Post-Veröffentlichung Segment Ein '+' (ex: 1.1.0.0 + build.42). SemVer nennt diese Build-Metadaten, aber ich denke, nach der Veröffentlichung Segment klarer ist. Dieses Segment ist für den Nachsilbendatenelement erklärt nicht auf die Vereinbarkeit Informationen im primären Freigabe-Segment . Ihre kontinuierliche Integration Builds kann dann die vorherige Release-Nummer mit einer inkrementellen Build-Nummer angehängt gegeben werden, die nach jeder primären Release setzt (ex: 1.1.0.0 -> 1.1.0.0 + build.1 -> 1.1.0.0 + build.2 -> 1.1.0.1). Einige Leute mögen abwechselnd die SVN-Revisionsnummer hier setzen oder die git sha verpflichten, um es einfach zu der Code-Repository zu binden. Eine weitere Möglichkeit ist es, die Post-Release-Segment für Hotfixes und Patches zu verwenden, tho es sich lohnen könnte man bedenkt, dass für eine neue primäre Trennkomponente hinzugefügt wird. Es kann immer gelöscht werden, wenn die Patch-Komponente wird erhöht, da die Versionen effektiv linksbündig und sortiert werden.

Zusätzlich zu den Release-und Post-Release-Segmenten, die Leute wollen oft ein Pre-Release-Segment verwenden , um fast stabile Pre-Releases wie Alphas, Betas zu zeigen und Kandidaten freigeben. Der SemVer Ansatz funktioniert dies gut, aber ich empfehle Trennung numerische Komponenten von alphanumerischen Klassifizierer (ex: 1.2.0.0 + alpha.2 oder 1.2.0.0 + RC.2). Normalerweise würden Sie das Release-Segment in der gleichen Zeit stoßen das Post-Release-Segment wie das Hinzufügen und dann das Pre-Release-Segment fallen, wenn Sie neben ihnen primäres Release Segment stoßen (ex: 1.0.1.2 -> 1.2.0.0-RC.1 - > 1.2.0.0). Pre-Release-Segmente erhalten hinzugefügt, um anzuzeigen, dass die Release-Version kommen wird, in der Regel nur einen festen Satz von Funktionen für tiefer gehende Prüfung und die gemeinsamen Nutzung, die von Minute zu Minute nicht basierend auf mehr Commits ändern.

Die Schönheit der all dies semantisch definiert in einer Weise, die fast alle Anwendungsfälle abdeckt, ist, dass Sie analysieren können, sortieren, vergleichen und erhöht sie in üblicher Weise mit. Dies ist besonders wichtig bei der Verwendung von CI-Systemen für komplexe Anwendungen mit vielen kleinen unabhängig versioniert Komponenten (wie Mikro-Dienstleistungen), die jeweils mit ihren eigenen verwalteten Abhängigkeiten.

Wenn Sie interessiert sind, ich schrieb einen halb semantischen Parser in rubin . Ich musste nicht nur dieses Muster verwenden, aber in der Lage andere Anwendungen zu verwalten, die es verwendet.

„Versionsnummern“ sind eine Sache für Ihr internes Versionskontrollsystem. Release-Nummern sind eine andere Sache (und sollte anders gehalten werden).

Halten Sie sich an einem einfachen MAJOR.MINOR Release-System (wie v1.27), wo MAJOR der Kompatibilitätsgrad ist (Version 2.x ist nicht kompatibel mit oder zumindest majorly unterscheidet sich von Version 1.x) und kleinere ist Ihre Bugfix Releases oder kleinere Verbesserungen. Solange Sie das X.Y Format folgen, können Sie auch andere Systeme wie YEAR.MONTH (2009.12) oder YEAR.RELEASE (2009.3) verwenden. Aber wirklich sind Sie wahrscheinlich am besten Festhalten an MAJOR.MINOR, wenn Sie einen guten Grund, nicht zu haben.

Auf jeden Fall nicht alles verwenden, die nicht das XY-Format passen, wie es sich für distros hart machen werde, Ankündigung Websites, etc. mit Ihnen zu arbeiten, und das allein ernsthaft Ihrem Projekt Popularität beeinträchtigen könnte.

Mit Zweigen und Tags in Ihrem (vorzugsweise verteilt) Versionskontrollsystem spezifische interne Versionsnummern wie in Bezug auf Haupt- und Nebenfächer zu markieren ist.

Und ja, sollte 1,0 stabil sein. Alle Veröffentlichungen sollten stabil sein, es sei denn, sie Alpha-, Beta- oder RC markiert sind. Verwenden Sie Alphas für bekannte aufgebrochene-and-unvollständig. Betas für bekannte gebrochen. RCs für „versuchen Sie es, Sie werden wahrscheinlich vor Ort Dinge, die wir verpasst“. Alles, was ohne eine davon sollte (im Idealfall natürlich) getestet werden, bekannt gut, haben ein aktuelles Handbuch, etc.

Es ist ziemlich beliebt in diesen Tagen nur die Subversion-Revisionsnummer zu verwenden.

Wenn es in SVN ist, warum dann nicht die SVN-Revisionsnummer verwenden?

Wenn man sich rechts unten auf dieser Seite finden Sie die Stack-Überlauf Versionsnummer, die die SVN-Revisionsnummer ist.

Die Versionierung ist bis zu Ihnen; I 1.0 auf der ersten Version setzen würde ich war zuversichtlich in. Vielleicht möchten Sie es schnell mit anderen Versionen folgen zu lassen, da einige Software-Anbieter einen schlechten Ruf 1.0 gegeben haben.

Sie haben einige Art und Weise wollen verwendet, um die Versionsnummer auf die genaue Version von binden, aber Sie wahrscheinlich wollen, dass es für die Endbenutzer schön und einfach zu sein. Betrachten wir unter Verwendung von Standard-Versionsnummern und Markieren der SVN-Repository mit der Versionsnummer enthalten.

Während nur mit der Subversion-Revisionsnummer geht schön und einfach ist, tut es Informationen aus der Versionsnummer entfernen. Benutzer könnten dies eine schlechte Sache betrachten.

Ich gehe davon aus, dass Ihre Webapp eine Art Auslösungsverfahren haben werden, so dass nicht jede Revision in Subversion ist tatsächlich veröffentlicht. Da es von den „außen“ (aus der Sicht des Benutzers) unmöglich ist, zu bestimmen, wann Versionen gemacht werden, und wie viele Revisionen wird der Code zwischen ihnen durchlaufen, macht es die Zahlen fast zufällig. Sie werden zuzunehmen, und ich denke, es ist möglich, mutmaßen einig Art Abstand von dem Vergleich von zwei Revisionen, aber nicht viel.

Klassische Versionsnummern sind in der Regel releases „dramatisieren“, so dass die Nutzer eine Art von Erwartung aufbauen können. Es ist einfacher, zu denken: „Ich habe die Version 1.0, jetzt Version 1.1 ist out Hinzufügen dieses und jenes, das klingt interessant“ als zu denken, „wir gestern SO Revision 2587 lief, heute ist es 3233, muss es viel besser sein!“.

Natürlich kann diese Dramatisierung auch aufgeblasen werden, mit Unternehmen Versionsnummern Kommissionierung, die gemeint ist interessanter zu klingen, als durch die tatsächlichen Unterschiede in dem Produkt motiviert ist, mich mit der Revisionsnummer erraten gehen kontert dies ein wenig.

Versionsschema:.. [Großen] [minor] [devrel] [mark]
[Major]. Schritt, wenn Sie eine drastische Veränderung in der Entwicklung haben
[Minor]. Schritt, wenn Sie eine kleine Änderung in der Entwicklung haben
[Devrel]: erhöht, wenn Sie einen Bug-Fix haben. Auf Null zurückgesetzt, wenn größere ++ oder kleinere ++.
[Mark]: a, b oder rc: a ist eine Alpha-Version, b ist Beta-Version, und rc ist ein Release Candidate. Beachten Sie, dass Versionen wie 1.3.57a oder 1.3.57b oder 1.3.57rc vor der Version 1.3.57 ist. Starten Sie bei 0.0.0.

Wir haben viel zu viel Zeit zu entscheiden, ausgegeben, wenn die Hauptversion zu erhöhen. Einige Geschäfte täte es selten, so dass Sie Releases wie 1.25.3 haben würde und andere es tun würde für immer loslassen geben Sie 15,0

habe ich damit satt und überzeugt alle die Hauptversionsnummer ist nur das Jahr und die kleine ist nur eine sequentielle Freisetzung im Laufe des Jahres. Der Anwender schien es zu mögen und es ist ein Kinderspiel zu kommen-up mit der nächsten Versionsnummer.

Year.Release.build

  • year = laufende Jahr
  • Release = Sequenz # öffentlicher Versionen mit neue Funktionalität - auf 1 zurückgesetzt jedem Jahr
  • bauen = erhöht für Fehler Fixes und interne Veröffentlichungen

EDIT

** Nun ist dies für eine interne Anwendung, die kontinuierlich weiterentwickelt wurde **

Dies würde wahrscheinlich nicht für kommerzielle Anwendungen arbeiten, wo es wichtig ist Major-Releases zu verschiedenen Zeiten des Jahres für Marketing und finanzwirtschaftliche Zwecke haben.

Ich habe sehr wenig Erfahrung auf dem Gebiet. Aber hier ist, was ich tun würde:

  1. Wählen Sie ein System für die Revisionen Nummerierung und daran halten. Seien Sie konsequent.
  2. Jede Version Änderung darstellen sollte eine signifikante Änderung . Wie klein eine Veränderung ist signifikant und die Höhe der Änderung, die in der Versionsnummer reflektiert wird, ist bis zu Ihnen.

Natürlich können Sie einfach die SVN-Revisionsnummer verwenden --- wie viele andere vorgeschlagen haben !!!

Ich hoffe, das hilft.

Der Grund, warum diese Frage existiert, weil wir das Konfigurationsmanagement nicht eine einzelne vereinbarte Art und Weise zu tun.

Die Art und Weise Ich mag Versionsnummer tun, ist nur Schritt ganze Zahl von 1. Ich habe keinen Mehr Teil Versionsnummer wollen, dass ich erklären oder Dokument muss. Und ich will nicht SVN rev Nummer verwenden, wie das erfordert auch einiges zu erklären.

Sie würden einige Release-Skripte auf der SVN müssen, damit dies geschieht

Wir verwenden eine einfache major.minor.julian_date Syntax.

Dabei gilt;

  • major - Erste Version 1 ist und dann, wenn wir wichtige neue Funktionen oder Änderungen so bedeutend sie sind nicht rückwärtskompatibel Anstieg dieser Zahl
  • einführen.
  • minor - Der wichtigste Meilenstein-Releases. Für jeden Build durch die Produktion diese Zahl erhöht sich geschoben.
  • julian_date - Die Julian Day die Build QA geschoben wurde.

Beispiel des ersten Release geschoben QA auf 1/15 ist -> 1.0.015
Beispiel für die erste Veröffentlichung geschoben Produktion auf 3/4 -> 1.1.063

Es ist nicht perfekt, aber praktisch, da wir Builds QA in der Nähe von täglich drücken.

Einige gute Infos hier:

Wenn ändern Datei / Montage Versionen

Zu allererst Dateiversionen und Montage Versionen übereinstimmen müssen nicht miteinander. Ich empfehle, dass Dateiversionen mit jedem Build ändern. Aber keine Montage Versionen ändern sich mit jeder nur bauen, so dass Sie den Unterschied zwischen zwei Versionen derselben Datei sagen kann; verwenden, um die Dateiversion für das. Die Entscheidung, wann Montage Versionen ändern dauert einige Diskussion über die Art der betrachten baut: Versand und nicht-Versand.

Non-Versand Baut Im Allgemeinen empfehlen Ihnen, ich nicht-Versand Montage Versionen die gleiche zwischen Versand aufbaut. Dies vermeidet stark genannten Montage Probleme beim Laden aufgrund Versionskonflikte. Einige Leute ziehen mit Publisher-Richtlinien neue Montagevarianten für jeden Build zu umleiten. Ich empfehle dagegen für nicht-Versand baut, aber: es werden nicht alle die Ladeprobleme zu vermeiden. Zum Beispiel, wenn ein Partner x-Kopien Ihrer Anwendung, können sie nicht wissen, Verlag Politik zu installieren. Dann wird Ihre App für sie gebrochen werden, auch wenn es auf Ihrem Rechner funktioniert gut.

Aber, wenn es Fälle gibt, in denen verschiedene Anwendungen auf der gleichen Maschine zu verschiedenen Versionen der Assembly binden müssen, empfehle ich geben denen verschiedene Montagevarianten baut, so dass die richtige für jede Anwendung kann verwendet werden, ohne Loadfrom verwenden / etc.

Versand Baut Als ob es eine gute Idee, diese Version zu ändern, für den Versand baut, es hängt davon ab, wie Sie die Bindung wollen für die Endnutzer zu arbeiten. Wollen Sie diese Builds Seite-an-Seite oder an Ort und Stelle zu sein? Gibt es viele Veränderungen zwischen den beiden baut? Werden sie einige Kunden brechen? Haben Sie Sorge, dass es bricht sie (oder tun Sie Benutzer dazu zwingen möchten, dass Ihre wichtigen Updates zu verwenden)? Wenn ja, sollten Sie die Assemblierung-Version Erhöhen berücksichtigen. Aber dann wieder, die Ansicht, dass das zu oft tun kann Wurf die Festplatte des Benutzers mit veralteten Baugruppen.

Wenn Sie ändern Ihre Assembly Versionen Um fest codierte Versionen auf den neuen zu ändern, empfehle ich eine Variable auf die Version in einer Header-Datei einstellen und das Hardcoding in Quellen mit den Variablen zu ersetzen. Führen Sie dann einen Pre-Prozessor während des Build in der richtigen Version zu setzen. Ich empfehle wechselnde Versionen direkt nach dem Versand, nicht direkt vor, so dass es mehr Zeit, Fehler aufgrund der Änderung zu fangen.

oder Ihre ‚gedacht‘ Versionsnummer Komma Subversion Nummer zu verwenden .. z.B.

1.0.101 // Revision 101, Release

oder 1.0.101-090303 // mit Release-Datum, ich benutze diese

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top