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