どの「バージョン命名規則」を使用していますか?[閉まっている]


107

異なるバージョンの命名規則は異なるプロジェクトに適していますか?何を使用し、その理由は?

個人的には、16進数のビルド番号(11BCFなど)を好みます。これは非常に定期的に増やす必要があります。そして、顧客向けにシンプルな3桁のバージョン番号、つまり1.1.3。

1.2.3 (11BCF) <- Build number, should correspond with a revision in source control
^ ^ ^
| | |
| | +--- Minor bugs, spelling mistakes, etc.
| +----- Minor features, major bug fixes, etc.
+------- Major version, UX changes, file format changes, etc.

回答:


45

Jeff Atwoodに完全に同意することはめったにありませんが、バージョン番号の.NET規則に関する彼の意見に従う傾向があります

(メジャーバージョン)。(マイナーバージョン)。(リビジョン番号)。(ビルド番号)

たいていの場合、個人的なプロジェクトでは、これはやり過ぎだと思います。C#で検索エンジンなどの重要なプロジェクトに取り組んできた数回は、この規則に固執し、内部トラッカーとして効果的に使用することができました。


1
これは、大小を問わず多くのプロジェクトでうまく使用されているのを見たパターンに従う傾向があります。とても効果的です。
luis.espinal

1
「ビルド番号」と「チェンジセット識別子(ハッシュ)」はどのように関係しますか?それはハッシュの一部、増分、または他の何かですか?
ジェイスブラウニング

@Jace、私が働いている場所ではMercurialを使用し、チェンジセット番号を削除します。単一のリポジトリーにプッシュ/プルするだけなので、その番号は特定のチェックアウトに固有のものではありません。それに応じて、[メジャー]。[マイナー]。[変更セット]があります(メジャー番号とマイナー番号は、多くの場合、前回のバージョン以降の進捗を示すよりもマーケティング的です)。
ワイハリー

.NETバージョン構造でToString()を呼び出すと、ビルドはリビジョンではなく3番目の番号になります。このPowerShellスクリプトでわかるように:$version = New-Object System.Version 1, 2, 3, 4; $version.ToString(); $version.Build;
ジョエルマクベス

「ビルド番号」は、バグ修正などの単なる微調整であることを意味しますか?新しい機能には、少なくとも独自のリビジョン番号を取得する必要がありますか?
カイルデラニー

90

セマンティックバージョニング(http://semver.org/)はここで言及するに値します。これは、バージョン管理スキームのパブリック仕様であり、の形式です[Major].[Minor].[Patch]。このスキームの動機は、バージョン番号と意味を伝えることです。


驚いたことに、これ以上の愛を得ていない。
マークカンラス

私はパーティーに少し遅れました...元の質問の9か月後にこの回答を追加しました。;
M.ダドリー

これは、以下で説明したRubyGems Rational Versioningポリシーと同じように機能し、より形式化されているように見えます。
ケンブルーム

@MarkCanlasは、メジャー/マイナー/パッチリリースを構成するものに特定のアイデアを結び付けるため、これ以上の愛情を得ることができません。それはちょっと奇妙なAPIについて語っています
ルドルフオラー

5
SemVerは、ユーザー向けのソフトウェアではなく、バージョン管理APIを対象としています。「セマンティックバージョン管理を使用するソフトウェアは、パブリックAPIを宣言する必要があります。」技術的には、パブリックAPIなしではSemVerを使用できません。ただし、ユーザー向けアプリケーションのバージョン管理には、SemVerに似たものを採用することをお勧めします。
Ajedi32 14

33

私はそれを使用しませんが、私は見たことがあり、それは興味深い構造です:

Year.Month.Day.Build

自己説明した。


4
そして、あなたはいつもあなたのコードがどれだけ新しいかを知っています..!:)
リピス

3
これはUbuntuのバージョン番号にも似ています。例:10.04および10.10
Brad Cupit

5
これは、互換性の問題がないシステム(Webサイト)、または本質的に常に非互換性があるシステム(ubuntuリリース)でのみ機能することを言及する価値があります。
jkerian

1
@jkerian、なぜ互換性が重要なのですか?
AviD

12
@AviD:この質問に対する他のほぼすべての回答が互換性情報を含むバージョンシステムを示しているので、なぜこれを求めているのか少し混乱しています。選択は、バージョン番号で記録する情報によって異なります。私の目的では、日付には基本的に意味がありません(v1から開始してビルドごとにインクリメントするだけで改善されます)。あなたは今までに分岐しますか?「新しいバージョン」のリリース中に「古いコードの新しいパッチ」をリリースしたことはありますか?しかし、ウェブサイトやオペレーティングシステムのようなものにとっては、日付ベースのシステムが非常に適切なようです。
jkerian

13

RubyGems Rationalバージョン管理ポリシーを使用しようとしています。

  • バイナリ互換性が壊れると、メジャーバージョン番号が増加します
  • 新しい機能が追加されると、マイナーバージョン番号が増加します
  • バグ修正のためにビルド番号が変更されました。

2
この本質的に意味バージョンとして知られている:semver.org
パトリスM.

2
@PatriceM。そのリンクを共有してくれてありがとう。その答えを書いたとき、semver.orgは存在しませんでした。
ケンブルーム

10

バージョン番号付けの非常にきめ細かいアプローチを次に示します。

  • N.x.K、ここでNおよびKは整数です。例:1.x.05.x.110.x.33中間ビルドに使用されます
  • N.M.K、ここNMおよびKは整数です。例:1.0.05.3.110.22.33リリースに使用されます
  • N.x.xNは整数です。例:1.x.xサポートブランチに使用されます
  • N.M.x、ここでNおよびMは整数です。例:1.0.xリリースブランチに使用されます

バージョン番号付けのアプローチを簡単に説明する図を次に示します。

アジャイルバージョン番号

PA意味プレアルファは A 意味アルファ B 意味ベータは AR意味アルファリリースは BR意味ベータリリースでは、 RC意味のリリース候補を ST意味し、安定

このようなバージョン番号付けアプローチの利点は次のとおりです。

  • アジャイルソフトウェア開発ライフサイクルの詳細を表します
  • ソースコードリポジトリ構造の詳細を考慮します。
  • パターンに慣れた人にとっては自明です。すべてのパターンは異なるアーティファクトを表します。このようなパターンは簡単に解析され、問題追跡などの他の目的に使用できます。
  • 説明したバージョン管理アプローチの基本であるバージョン管理パターンセットは、メトリックの収集計画に使用できます。
  • 成熟度品質レベルの概念に焦点を当てています。多くの場合、1.0.0などのバージョン番号はあまり必要なく割り当てられます(ソフトウェアがディープアルファの場合)。提示されたバージョン番号付けアプローチにより、いくつかのレベルの成熟度を確立できます。最も単純なケースでは、中間ビルドN.x.K)とリリースN.M.K)の2つのレベルしかありません。リリースとは、完全なバージョン番号(N.M.K)のソフトウェアが、サプラ​​イヤ企業/組織/チーム内で何らかの品質管理プロセスを経たことを意味します。
  • これは、開発とテストの両方のアジャイルな性質の証拠です。
  • ソフトウェアの構造とアーキテクチャへのモジュール式アプローチを奨励します。

バージョン管理のアプローチを詳細に表す、より複雑なもあります。また、バージョニングアプローチへの移行を説明する便利なプレゼンテーションスライドと、バージョン番号付けアプローチの基本原則を示すSCMFVizアプリケーションがあります。プレゼンテーションのスライドでは、ソフトウェアプロジェクトの全期間を通じて同じバージョン管理アプローチに従うことが重要である理由も説明しています。

個人的に、実際のバージョン番号の代わりに日付バージョンを使用するという私の姿勢は、日付バージョンのソフトウェアの開発者が以下を前提としている:

  • ソフトウェア開発ライフサイクルについては何も知りません。開発は通常、機敏で反復的です。バージョン番号付けのアプローチは、ソフトウェア開発プロセスの反復的な性質を表す必要があります。
  • ソフトウェアの品質を気にしないでください。品質管理と保証は機敏で反復的です。開発と同じです。また、バージョン番号は、開発と品質管理/保証の両方のアジャイルで反復的な性質の証拠でなければなりません。
  • アーキテクチャやアプリケーションのアイデア気にしないでください。(メジャーバージョン番号NではN.M.K)アプリケーションの両方のアーキテクチャ上のソリューションと基本原理を担当しています。メジャーバージョン番号Nは、アーキテクチャの変更、または主要なアイデアとその動作/機能の原則の変更に応じて変更する必要があります。
  • コードベースを制御しないでください。おそらくブランチ(トランク)は1つだけであり、すべてに使用されます。個人的には、コードベースが1つの大きなガベージダンプになることを奨励しているため、これは正しいとは思いません。

このアプローチは少し議論の余地があるように見えるかもしれませんが、これはソフトウェアに適切なバージョン番号を与える最も簡単な方法であると信じています。


最初のリンクダウン...............
Pacerier

8

リリースするメジャーバージョンごとに、内部で呼び出すバージョンを使用することは珍しくありません。たとえば、最後の仕事で、次のUbuntuにヒントを得た命名規則を持つメジャーバージョンを参照しました。

[病状] [動物の名前]

これは、「リンプランプレイ」、「傷ついたウォンバット」、「喘息のアリクイ」などの名前を付けました。

本当にクールな名前でない限り、顧客に漏れないようにしてください。


2
時間とエネルギーの非効率的な使用のように
思え

10
そのコメントを残していましたが、それはあなたを止めませんでした。
ジェシーC.スライサー

それは全体の大きさよりも小さい
......-- Pacerier

7

Generation.Version.Revision.Build(9.99.999.9999)

世代はめったに変わりません。製品の大きな転換点:DOS-> Windows、完全なリエンジニアリング。

バージョンは、大きな互換性のない変更、新しい機能、ソフトウェアの特定のパラダイムの変更などのためのものです。

改訂は頻繁に行われます(マイナーな機能とバグ修正)。

ビルドは内部情報です。


良いアイデア。「世代」のアイデアはどこから得たのですか?
パセリエ

6

git describeあなたが選んだ番号付け規則に素晴らしい拡張を提供します。これをビルド/パッケージング/展開プロセスに組み込むのは簡単です。

タグ付きリリースバージョンにABC(major.minor.maintenance)という名前を付けたとします。git describe特定のコミットで、最新のタグ付けされたコミットの祖先を見つけ、それ以降のコミットの数、およびコミットの短縮されたSHA1を追跡します。

1.2.3-164-g6f10c

もちろん、実際にいずれかのバージョンを使用している場合は、タグ(1.2.3)を取得するだけです。

これには、ビルドのソースを正確に知らせることができるというメリットがありますが、ビルドごとに番号を付ける必要はありません。


2

Major.Minor.Public(ビルド)[アルファ/ベータ/トライアル](「4.08c(1290)」など)

  • Majorはメジャーバージョン番号です(1、2、3 ...)
  • マイナーは2桁のマイナーバージョン(01、02、03 ...)です。通常、重要な新機能が追加されると、10桁が増加します。これは、バグ修正のみを目的としています。
  • パブリック(ビルドのパブリックリリース(a、b、c、d、e))。マイナーバージョンがパブリックアップデートとしてリリースされない場合、マイナーバージョンとは異なることが多い
  • build、コンパイラが追跡する実際のビルド番号。
  • これらの特別な場合には、TRIAL、ALPHA、BETA X、またはRC Xが追加されます。

2

意味的な意味を割り当てるバージョン番号が好きです。バージョン番号を使用して、ソースコード(およびアクティビティ管理システム)で発生した変更に対する特定のバージョンで報告されたバグを追跡できる限り、おそらく正しい方法を使用しています。

私は.NETを使用しているため、.NETバージョン番号付けシステムにこだわっていますが、数字に意味的な意味を与えようとしています。

major.minor.build.revision

  • major =(プロジェクトまで)
  • マイナー=(プロジェクトまで)
  • build = Hudsonのビルド番号(ここではTeamCityまたはTeamBuildなどを使用できます)
  • リビジョン= subversionまたはbazaarリビジョン(プロジェクトとその用途によって異なります)

バージョン番号が何らかの方法で表示されることを常に確認します(通常、バッチコンソールベースのプログラムはコンソールとログファイルに印刷され、Webアプリは通常上部のメニューバーに表示されます)

このように、クライアントが問題を報告した場合、バージョン番号を使用して、最新バージョンを使用しているか、特定のバージョンで発生した問題の数を追跡できます。

トレーサビリティがすべてです!


1

Major.Minor.Build#.YYMMDD [suffix] を使用します。通常、特定の日に1つの実動ビルドのみを行い(ただし、複数ある場合はab / c / dサフィックスを使用します)、YYMMDDはユーザー/顧客/管理を提供します6.3.1389がそうではないビルドの年齢の指標。

メジャー番号は、重要な製品機能(有料)とともに増加します。

修正/改善に伴い、マイナー番号が増加します(無料アップデート)。

ビルドは常に増加します。すべてのビルドが出荷されるわけではないので、直線的な進行ではありません。


1

バージョン番号には、競合を回避し、間違ったリリースタイプの問題のバグを修正するのに十分な情報が含まれている必要がありますが、関係のない追加情報を伝えてはなりません。

たとえば、日付を使用すると、顧客は古いバージョンを使用していることがわかり、古いバージョンに対するパッチはわかりにくいバージョンを使用する可能性があります。

私は個人的にセマンティックバージョニングが好きです

  • リリースはMajorです。MinorPatch
  • Patch ビルドをリリースするたびに増加します。
  • Minor 後方互換性のある機能が追加されるたびに増加します。
  • Major 新しい機能に後方互換性がない場合に増加します。
  • ときMajor== 0あなたは、アルファ/プレリリースにしています。Major> = 1は公開リリースです。
  • 増分するたびに小さい数値が0にリセットされるため、

    1.5.3-> 1.5.4(バグ修正)-> 1.6.0(マイナー機能)-> 2.0.0(重大な変更)

このように、誰かがたとえばバージョン1.5.3を使用している場合1.5.4、パッチを取得するためにアップグレードできる1.6.0こと、機能を追加すること、およびアップグレードするべきではないことを一目で知ることができます2.0.0(少なくとも変更を処理せずに)。


SemverはAPIでのみ機能します。製品ではありません。
パセリエ

@Pacerierはその理由を説明できますか?
キース


@Pacerierは、このパターンをバージョン番号付けに使用できないことを意味しません。
キース

0
              1.0.0
                |
              1.0.1
                |
(パブリック1.0)1.0.2 -----
                | \
              2.0.0 1.1.0
                | |
              2.0.1 1.1.1(パブリック1.1)
                |
(パブリック2.0)2.0.2 -----
                | \
              3.0.0 2.1.0
                         |
                       2.1.1(パブリック2.1)
                         |
                       2.2.0
                         |
                       2.2.1

X.Y.Z内部バージョン番号です。X.Yは公開バージョン番号で、クライアントにとって意味のあるものです。ときX.Y.Zバージョンはパブリックになり、そこになることはありませんX.Y.(Z+1)バージョン:公共のバージョンは、常にセリエの最後です。

X メジャーバージョンがリリースされると増分されます。

Y これらのメジャーリリースのメンテナンスブランチに使用され、バグ修正のみに使用されます。

Z内部で使用され、固定の意味はありません。これまでZ、アプリケーションに非開発者向けに興味深い機能セットがあり、比較的安定していると思うと、新しいバージョンを作成します。このようにして、誰かが尋ねたときに、アプリケーションの「最後の既知の良いバージョン」のデモを表示できます。近い将来、Zバグトラッカーで機能の「ターゲット」の命名に番号バージョンを使用する予定です。

補足としてrelease、バージョン番号をインクリメントするために(コマンドと共に)mavenを使用します。だから、そこにあるX.Y.Z-SNAPSHOT、あまりにも(間のいずれかのバージョンを示しているバージョンX.Y.(Z-1)X.Y.Z)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.