コミットにバージョンタグを付けないのはいつですか?


30

コンテキスト:最近、セマンティックバージョニングについて知り、自分のプロジェクトで実際にそれを最適に使用する方法を決定しようとしています。

semverがバージョニングのために大きな変更、小さな変更、およびパッチを考慮に入れていることを考えると、いつコミットに更新されたバージョンのタグを付けるべきではないでしょうか?すべての変更がこれらのカテゴリのいずれかに収まるように思えるので、すべての変更をバージョン管理する必要がありますが、GitHubで人気のあるさまざまなプロジェクトを見ると、これは物事が行われる方法ではないようです(大規模なプロジェクトには数万件のコミットがあり、タグは数百件しかありません)。


23
プロジェクト内の安定したテスト済みの品質保証リリースをマスターしようとするすべてのコミットメントはありますか?
アレックスラインキング

1
@AlexReinkingすべてのコミットがテストされますが、私は自分の個人プロジェクトで一般的な慣行に慣れようとしているので、私はそれをただ作業しているだけなので、「変更を加え、テストする」以外のシステムは実際にはありませんそれを自分でコミットします」。
VortixDev

また、タグは後で変更できることに注意してください。唯一の堅実なコミット識別子は、コミットハッシュキーです。
するThorbjörnRavnアンデルセン

9
マスターへのすべてのコミット??? マスターにコミットしてはいけません。マスターへのマージはすべて、はるかに優れています。
14:27の

2
@xyiousが頭に釘を打ちます。マスター上のすべてのコミットは、開発版からのリリースマージである必要があるため、マスターで終了するすべてのコミットにはバージョンをタグ付けする必要があります。
BJマイヤーズ

回答:


71

SemVer はコミットではなくリリースのバージョン管理に関するものです。バージョン管理モデルで、マスターへのすべてのコミットをリリースにする必要がある場合、はい、すべてのコミットに変更の程度に応じてタグを付ける必要があります。

ただし、一般的に、プロジェクトはマスター上でほとんど安定した製品を開発し、サポートに値すると思われるリリースにタグを付けます。そうすると、バージョン管理スキームに従ってタグが付けられますが、特にSemVerである必要はありません。


5
SemVerは、ユーザーが人間ではなく他のコードであるライブラリに対してのみ意味があります。ユーザーが新しいバージョンに自動的に適応できるため、ほとんどのユーザー向けアプリには実際には「重大な」変更はありません。
Qwertie

5
ユーザー向けアプリのコマンドラインバージョンは、フラグと出力形式の動作が異なる可能性があるため、意味的にバージョン管理する必要があると主張します。灰色の領域のビット。
アレックスラインキング

5
@Qwertieユーザーの期待はソフトウェアの期待ほど厳格ではありませんが、まだ存在しています。私は間違いなく、インターフェイスまたは機能の「破壊的な」変更と思われるものを発行した多くのソフトウェアを使用しました。メジャーリリースとマイナーリリースを構成するものを決定することは、ライブラリを使用する場合よりも主観的であることは確かですが、それを避ける理由は必ずしもありません。
鉄グレムリン

11
@Qwertie-アップグレードを控えます。WindowsおよびOfficeの古いメジャーバージョンをまだ実行しているユーザーは何人ですか?
アレックスラインキング

5
@Qwertie彼らは、変更ログまたはドキュメントを注意深く読んで、システムを使用して新しい機能または変更された機能を使用する方法を調整したり、削除された機能の回避策を見つけたりするよう促されます。同じことです。ソフトウェアが変更されたため、ソフトウェアの使用方法を変更する必要があるため、その変更について明確に伝える必要があります。
鉄グレムリン

11

バージョン番号はリリースに割り当てられます。一般に、すべてのコミットがリリースである必要はありません。これにはいくつかの理由があります。

まず、すべてのコミットを「テスト」すると言っている間、テストのレベルがあります。1台のマシンで自動化されたテストスイートを実行することはすべて問題ありませんが、複雑なソフトウェアではすべての問題をキャッチすることはできません。ハードウェアまたは構成に固有の問題もあれば、ハードテスト可能な要件よりも人間の主観的な考慮事項に関する問題もあります。

次に、メジャーバージョン番号を変更することはまれなアクションです。基本的に、削除された機能に依存しているかどうかを確認するには、ソフトウェアに依存するすべてのものを手動でチェックする必要があります。

この結果、長期的に現在の形でそれらの機能をサポートする準備ができている場合にのみ、完全な(アルファ/ベータではない)リリースで機能を「パブリックAPI」に追加する必要があります。

第三に、広く使用されているバージョンの数を抑えることは有用です。安定したブランチ上であっても、多くの修正をまとめて単一のリリースを作成する方が、修正ごとにリリースするよりも良い場合がよくあります。


2

言うまでもありませんが、バージョン番号の目的は、誰が実行しているソフトウェアのバージョンを簡単に判断できるようにすることです。

コードの特定の反復にアクセスできる可能性があり、一意の識別子を簡単に判別できない場合、その反復には一意のバージョン番号が必要です。これを「最初のルール」と考えています。結果として、明確なリリースには明らかに明確なバージョン番号が必要です。

ただし、さらに多くのことが関係しています。

これを確認する1つの方法は、各コミットでバージョン番号を上げることですが、これは通常良いアイデアではありません。比較的小さな変更を機能させるには、いくつかのコミット/イテレーションが必要な場合があります。また、多数の変更が蓄積され、0.0.2-> 0.0の結果としてバージョン0.0.1-> 0.0.2が表示されると、外の世界を混乱させます。 .56誰かが空白をコミットしたのは、一度に1つのファイルを修正し、機能的な変更を加えなかったためです。

「完全なリリースごとに1つのバージョン」から「コミットごとに1つのバージョン」までの道のりは、実際にあなた、他のユーザー、およびギャップを埋めるために使用するシステムによって異なります。

私は個人的に小さなプロジェクトでの作業に慣れており、他の人が使用するバージョンとこれらのそれぞれのバンプバージョンまで、gitハッシュを使用することを嬉しく思います(手に入れる人がいくら少なくても)。ただし、大企業や大規模プロジェクトでは、セマンティックバージョン番号以外の何かが使用されますが、リリース候補の番号付けなど、各コミットよりも忠実度が低くなります。これらには利点がありますが、複雑さが増します。


0

マスターにマージされるすべてのプルリクエストはバージョン管理される必要があります。

新しいバージョン(少なくともパッチ)であってはならない場合、feature / fix / etcが完全ではないため、マスターにマージすべきではありません。

ただし、チームのワークフローによっては、バージョンなしでマスターするために複数のコミットが行われる可能性があります。プルリクエストにいくつかのコミットがあり、それらがつぶされていない場合(私の意見ではないはずです)、まだ10のコミットとたった1つの新しいバージョンになる可能性があります。

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