私の会社は製品を構築しています。 SVNによってバージョン管理されます。それはウェブアプリですので、基本的には、いくつかの機能を持たないバージョンはありません。したがって、常にベータとラベル付けすることができます。しかし、それは企業向け製品になるので、そこに「不安定な監視」が必要なわけではありません。では、バージョニングについてはどうしますか? 1.0は安定していますか?ビルド日はバージョン番号に含める必要がありますか?皆さんの考えを教えてください!
[メジャー]。[マイナー]。[リリース]。[ビルド]
major:マーケティング上の決定。バージョン1.0を呼び出す準備はできていますか?同社はこれを顧客が追加料金を支払わなければならない可能性のあるメジャーバージョンと考えていますか、それとも現在のメジャーバージョンの無料アップデートかもしれませんか? R&Dの決定が少なく、製品の決定が多い。
マイナー:メジャーが増加するたびに0から始まります。公開されるすべてのバージョンに対して+1。
release:開発マイルストーンに到達して製品をリリースするたびに、内部(例:QA)でも、これを増やします。これは、組織内のチーム間のコミュニケーションにとって特に重要です。言うまでもなく、同じ「リリース」を2回(社内でも)リリースしないでください。 minor ++またはmajor ++で0にリセットされます。
build:SVNリビジョンである可能性があります。
x.y.z.g
gの増分は不安定です。 (またはRC)zの増分は安定しており、バグ修正を意味します。
yの増分は安定しており、新しい機能を意味します。
xの増分は、100%下位互換性のない安定したメジャーリリースです。
私はかつて、私の大規模なプロジェクトのために手の込んだ「バージョン管理スタイルガイド」を作成しました。プロジェクトは具体化できませんでしたが、スタイルガイドは まだオンラインで入手可能 です。それは私の個人的な意見であり、おそらくあなたに役立つ(またはインスピレーションを与える)ものです。
注意してください、それは長いテキストであり、コンポーネントのバージョン管理と製品のバージョン管理などになります。また、OSSコミュニティで人気のあるいくつかのバージョン管理スキームについて強い意見を表明していますが、私はそれらを持っているので、それらを表明します。 ;-)
たとえば、Subversionのリビジョン番号を使用することに同意しません。 TRUNKでの開発を継続している間、リリースされたバージョンを維持したい場合があります。そのため、メンテナンスブランチをセットアップし、リビジョン番号のバージョン管理を徹底的に行います。
Edit:要約すると、ソースファイル、コンポーネント、および製品全体のバージョン管理を区別します。コンポーネントと製品に別々のx.yバージョンを使用するシステムを使用し、2つのコンポーネント間のニースの相互依存により、どのコンポーネントバージョンがどの製品バージョンに属しているかを簡単に追跡できます。また、システムを壊さずにアルファ/ベータ/リリース/パッチサイクルを処理する方法についても説明します。実際、これは開発サイクル全体の手口ですので、チェリーピックしたいかもしれません。 ;-)
編集2:十分な人が私の記事をこれを「いい答え」にするのに役立つと思ったので、私は再び記事に取り組み始めました。 PDFおよびLaTeXバージョンが利用可能になりました。時間を見つけ次第、より良い言語と説明的なグラフィックを含む完全な書き直しが続きます。投票ありがとうございます!
ウィキペディアからインスピレーションを得てください: "Software versioning"
別の「新規」および「比較的人気のある」オプションは Semantic Versioning です。
要約:
バージョン番号MAJOR.MINOR.PATCHを指定して、次の値を増やします。
- 互換性のないAPIを変更した場合のメジャーバージョン、
- 下位互換性のある方法で機能を追加する場合のマイナーバージョン
- 後方互換性のあるバグ修正を行うときのパッチバージョン。
プレリリースおよびビルドメタデータの追加ラベルは、MAJOR.MINOR.PATCH形式の拡張機能として利用できます。
a.b.c.d
増分:いつ
-d:バグ修正
-c:メンテナンス、例:性能改善
-b:新機能
-a:アーキテクチャの変更
必須は、最も左のものです。たとえば、新しい機能とバグが修正された場合は、bを増やすだけで済みます。
複雑なエンタープライズプラットフォームレベルの依存関係管理とリリースバージョニングの経験に基づいて、私はSemi-Semantic Versioningと呼ぶのが好きなアプローチを推奨するようになりました。
基本的には Semantic Versioning 2. から構築されますが、それほど厳密ではありません。
半意味バージョンセグメント:
<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]
プライマリリリースセグメントの形式:
MARKETTING.MAJOR.MINOR.PATCH
各セグメントは英数字を許可する必要がありますが、論理的な増分変更には純粋な数値が推奨されます。
SemVerと同様、Major、Minor、およびPatchコンポーネントをお勧めしますが、逆互換性層を表すこともお勧めしますが、マーケティングコンポーネント。これにより、製品の所有者、機能の叙事詩/グループ、およびビジネスの懸念事項が、技術的な互換性の懸念事項とは無関係に主要なコンポーネントを強化できます。
他の回答とは異なり、プライマリセグメントにビルド番号を追加することはお勧めしません。代わりに、「=」の後にリリース後セグメントを追加します(例:1.1.0.0 + build.42)。 SemVerはこのビルドメタデータを呼び出しますが、リリース後のセグメントはより明確だと思います。このセグメントは、プライマリリリースセグメントの互換性情報に関連しないとして、サフィックスデータを宣言するのに最適です。継続的インテグレーションビルドには、以前のリリース番号に、各プライマリリリース後にリセットされる増分ビルド番号を追加することができます(例:1.1.0.0-> 1.1.0.0 + build.1-> 1.1.0.0 + build.2-> 1.1.0.1)。コードリポジトリと簡単に結びつけるために、svnリビジョン番号をここに入れたり、git commit shaを入れたりしたい人もいます。別のオプションは、ホットフィックスとパッチにリリース後のセグメントを使用することです。そのために、新しいプライマリリリースコンポーネントを追加することを検討する価値があるかもしれません。バージョンは事実上左揃えでソートされるため、パッチコンポーネントがインクリメントされると、常にドロップされる可能性があります。
リリースセグメントとリリース後のセグメントに加えて、プレリリースセグメントを使用して、アルファなどのほぼ安定したプレリリースを示すことがよくあります。ベータ版とリリース候補。これに対するSemVerアプローチはうまく機能しますが、数値コンポーネントを英数字分類子から分離することをお勧めします(例:1.2.0.0 + alpha.2または1.2.0.0 + RC.2)。通常、リリース後のセグメントを追加すると同時にリリースセグメントをバンプし、次にプライマリリリースセグメントをバンプするときにプレリリースセグメントをドロップします(例:1.0.1.2-> 1.2.0.0-RC.1- > 1.2.0.0)。プレリリースセグメントが追加され、リリースバージョンが近づいていることを示します。通常は、より詳細なテストと共有のための機能の固定セットであり、より多くのコミットに基づいて毎分変更されません。
ほとんどすべてのユースケースをカバーする方法でこのすべてを意味的に定義することの美しさは、標準的な方法でそれらを解析、ソート、比較、インクリメントできることです。これは、それぞれが管理された依存関係を持つ小さな独立バージョン管理コンポーネント(マイクロサービスなど)のある複雑なアプリケーションにCIシステムを使用する場合に特に重要です。
興味があれば、 Rubyの半意味構文解析プログラム と書きました。このパターンを使用するだけでなく、それを使用する他のアプリを管理できるようにする必要がありました。
「バージョン番号」は、内部バージョン管理システムの問題です。リリース番号は別の問題です(KEPTとは異なる必要があります)。
シンプルなMAJOR.MINORリリースシステム(v1.27など)に固執します。MAJORは互換性レベル(バージョン2.xはバージョン1.xと互換性がないか、少なくとも大幅に異なる)であり、マイナーはバグ修正リリースまたはマイナーな拡張機能です。 。 X.Y形式に従う限り、YEAR.MONTH(2009.12)やYEAR.RELEASE(2009.3)などの他のシステムを使用することもできます。しかし、実際には、正当な理由がない限り、おそらくMAJOR.MINORに固執するのが一番です。
X.Y形式に適合しないものは絶対に使用しないでください。ディストリビューション、アナウンスWebサイトなどがあなたと一緒に働くのが難しくなり、それだけでプロジェクトの人気に深刻な影響を及ぼす可能性があります。
(できれば分散型)バージョン管理システムでブランチとタグを使用して、特定の内部バージョン番号をそれぞれMAJORSとMINORSに関連するものとしてマークします。
はい、1.0は安定している必要があります。すべてのリリースは、アルファ、ベータ、またはRCとマークされていない限り、安定している必要があります。既知の壊れた不完全なアルファを使用します。既知の破損のベータ。 「試してみてください。おそらく私たちが見逃したものを見つけるでしょう」。これらのいずれも含まないものは、(理想的には、もちろん)テストされ、正常であることが確認され、最新のマニュアルなどが必要です。
SVNの場合、SVNリビジョン番号を使用しないのはなぜですか?
このWebページの右下を見ると、SVNリビジョン番号であるStack Overflowバージョン番号が表示されます。
最近では、Subversionのリビジョン番号を使用するだけでかなり人気があります。
バージョニングはあなた次第です;自信を持って最初のバージョンに1.0を付けました。1.0の評判が悪いソフトウェアベンダーがあるため、他のバージョンですばやくフォローアップしたい場合があります。
バージョン番号を使用されている正確なビルドに結び付ける何らかの方法が必要ですが、おそらくエンドユーザーにとってシンプルでシンプルにしたいでしょう。標準バージョン番号を使用し、SVNリポジトリにバージョン番号をタグ付けすることを検討してください。
Subversionのリビジョン番号をそのまま使用するのは簡単ですが、バージョン番号から情報を削除します。ユーザーはこれを悪いことと考えるかもしれません。
Subversionの各リビジョンが実際に公開されないように、webappにはある種の展開手順があると想定しています。 (外部から)(ユーザーの観点から)リリースが行われる時期と、リリース間でコードが受ける修正の数を判断することは不可能であるため、数値はほぼランダムになります。それらは増加するでしょう、そして、私は推測することができると思いますsome二つのリビジョンを比較することからの距離のようなものですが、それほどではありません。
古典的なバージョン番号は、リリースを「劇的化」する傾向があるため、ユーザーは何らかの期待を抱くことができます。 「昨日私たちが走ったSO改訂2587、今日は3233、それだもっと良くなければなりません!」。
もちろん、このドラマ化も膨らませることができ、企業は製品の実際の違いによって動機付けられているよりも面白いと思われるバージョン番号を選択しているので、リビジョン番号カウンターを少し使用すると思います。
バージョンスキーム:[major]。[minor]。[devrel] [mark]
[major]:開発に劇的な変化が生じた場合に増分します。
[マイナー]:開発にわずかな変更がある場合は増分します。
[devrel]:バグ修正がある場合は増分します。 major ++またはminor ++の場合、ゼロにリセットします。
[マーク]:a、bまたはrc:aはアルファリリース、bはベータリリース、rcはリリース候補です。 1.3.57a、1.3.57b、1.3.57rcなどのバージョンは、バージョン1.3.57より前であることに注意してください。 0.0.0から開始します。
メジャーバージョンをいつ増やすかを決定するのに時間がかかりすぎました。一部のショップではめったにそれを行わないため、1.25.3のようなリリースがあり、他のショップでは15.0を提供するためにこれを行います。
私はそれにうんざりし、メジャーリリース番号はちょうど年であり、マイナーは年内の連続したリリースであると確信しました。ユーザーはそれを気に入っているようで、次のバージョン番号を思い付くのは簡単です。
Year.Release.build
編集
**現在、これは継続的に強化された内部アプリ用です**
これはおそらく、マーケティングと財務の目的で、年の異なる時期にメジャーリリースを行うことが重要な商用アプリでは機能しません。
この地域での経験はほとんどありません。ただし、ここで私がやることは:
もちろん、他の多くの人が示唆しているように、svnリビジョン番号を使用できます!!!
これがお役に立てば幸いです。
単純なmajor.minor.julian_date構文を使用します。
どこ;
1/15にQAにプッシュされた最初のリリースの例は-> 1.0.015です
3/4にProductionにプッシュされた最初のリリースの例は-> 1.1.063です
完璧ではありませんが、ほぼ毎日QAにビルドをプッシュするのに便利です。
ここにいくつかの良い情報:
まず、ファイルバージョンとアセンブリバージョンは互いに一致する必要はありません。ファイルのバージョンはビルドごとに変更することをお勧めします。ただし、同じファイルの2つのバージョンの違いがわかるように、ビルドごとにアセンブリバージョンを変更しないでください。そのためにファイルバージョンを使用します。アセンブリのバージョンをいつ変更するかを決定するには、検討するビルドの種類(出荷と非出荷)のいくつかの議論が必要です。
非出荷ビルド一般に、出荷ビルド間で非出荷アセンブリバージョンを同じにすることをお勧めします。これにより、バージョンの不一致による厳密な名前のアセンブリ読み込み問題を回避できます。一部の人々は、パブリッシャーポリシーを使用して、各ビルドの新しいアセンブリバージョンをリダイレクトすることを好みます。ただし、非出荷ビルドにはお勧めしません。すべての読み込みの問題を回避できるわけではありません。たとえば、パートナーがアプリをXコピーした場合、パブリッシャーポリシーをインストールすることを知らない場合があります。そうすれば、あなたのアプリはあなたのマシンでうまく機能していても、それらのために壊れてしまいます。
ただし、同じマシン上の異なるアプリケーションがアセンブリの異なるバージョンにバインドする必要がある場合は、それらのビルドに異なるアセンブリバージョンを与えて、LoadFrom/etcを使用せずに各アプリの正しいバージョンを使用できるようにすることをお勧めします。
ビルドを出荷するビルドを出荷するためにそのバージョンを変更することをお勧めするかどうかは、エンドユーザーに対してバインディングをどのように機能させるかによって異なります。これらのビルドをサイドバイサイドまたはインプレースにしたいですか? 2つのビルド間に多くの変更がありますか?彼らは何人かの顧客を壊すでしょうか?それがそれらを壊すことを気にしますか(または、ユーザーに重要な更新を使用するように強制しますか)? 「はい」の場合、アセンブリバージョンの増分を検討する必要があります。しかし、繰り返しますが、これを何度も繰り返すと、ユーザーのディスクに古いアセンブリが散らばってしまう可能性があると考えてください。
アセンブリバージョンを変更する場合ハードコードバージョンを新しいバージョンに変更するには、ヘッダーファイルで変数をバージョンに設定し、ソースのハードコーディングを変数に置き換えることをお勧めします。次に、ビルド中にプリプロセッサを実行して、正しいバージョンを配置します。変更によるバグをキャッチする時間を確保するため、出荷直前ではなく出荷直後にバージョンを変更することをお勧めします。
この質問が存在する理由は、構成管理を行うための単一の合意された方法がないためです。
私が好きなバージョン番号の方法は、1から整数を増やすだけです。説明または文書化する必要のあるマルチパートバージョン番号は必要ありません。また、SVNのrev番号も使用したくないので、説明が必要です。
これを実現するには、SVNの上にいくつかのリリーススクリプトが必要です。