同僚と私は、リリース/SCM システムでのタグの価値と使用法について議論しています。この問題を解決するために、StackOverflow コミュニティからの意見をお待ちしております。
一方では、タグはリリース管理にとって価値のある追加機能であると主張しています。それらの使用例: このリリースで使用されるコード スナップショットである新しいタグ (1.0 と呼びます) を作成する Maven リリースを行います。このタグは READONLY ブランチである必要があります。バグを修正する必要がある場合、タグのコピーを新しいブランチ (1.1 と呼びます) に作成できます。バグ修正はそこに行きます。これらの修正は、メインの開発ブランチがバグ修正を取得できるように、トランクに再びマージされる場合があります。最後に、1.1 がリリースされ、タグ 1.1 が自動的に作成されます。このサイクルは続きます。ここでの Tag の主な利点は、何らかの理由でバージョン 1.0 を再リリースする必要がある場合に、誰も変更されていないという確信を持って Tag 1.0 をリリースできることです。また、「Release Tag 1.0」と言う方が、「元の 1 であるブランチ 1.0 のリビジョン 1 をリリースする」よりも簡潔です。
反対側は、特に CVS のタグのように機能するグローバル リビジョンを備えた Subversion のようなシステムでは、タグは価値のある利点を提供していないと主張しています。さらに、Subversion はタグにコミットするときにのみ警告を出します。それは実際にそれを止めません。彼らの方法はトランクで開発されており、リリース時に 1.0 というブランチを作成します。Trunk で引き続きバグ修正を行い、それらのバグ修正を本番環境に再リリースする必要がある場合は、それらを 1.0 Branch にマージして 1.0 を再リリースします。ある時点で、おそらく Trunk の主要な修正または機能の後、Branch 1.1 をリリースして作成します。サイクルは続きます。元の 1.0 バージョンをリリースする必要がある場合は、Branch 1.0 リビジョン 1 をチェックアウトする必要があります。
明らかに、両方の方法が機能します。どちらの方法が好まれているか、またその理由について、コミュニティの意見を聞きたいです。
編集:「最善の」方法が基礎となる SCM システムに依存することを少し心配しています。Subversion で解決するか、可能であれば SCM にとらわれないようにしてください。