バージョニングにタグとリリース/ベータブランチを使用する必要があるのはなぜですか?


114

私はgitを約1年使用しており、タグ付けを使用して、さまざまなバージョンのコミットにタグを付けたいと考えています。私はタグでの作業に使用するコマンドに情報をたくさん見つけましたが、私はちょうどと呼ばれる新しいブランチを作成することができるかどうか、私は知りたいことのすべてでなぜ使用タギングできた1.1.0全体で私の心をクラウドに持っていませんgitコマンドの新しいセット?

分岐ではなくタグ付けには多くの正当な理由があるはずですが、それらの利点が何であるか知りたいのですが。

回答:


96

タグは主に、コミットにタグを付けることにより、プロジェクトの特定のバージョンを将来参照するために使用されます。もちろん、ブランチはいつでも使用できますが、バージョンを頻繁に変更すると、未使用またはほとんど使用されないブランチがたくさん作成されます。

実際には、タグはとにかく分岐のない分岐であり、プロジェクトの特定のバージョンを参照する方法を追加するだけで複雑さを軽減します。

編集:ここに私はすべての私のプロジェクトのために使用することを利用gitのに良い方法があります。


あわや(:それはカバーすべての可能な解決策ということは本当に素晴らしいワークフローだ。
ハカンDeryal

はい、私は以前にnvieメソッドを見たことがありますが、かなり困惑しています。それにもかかわらず、私はそれを理解したら、それを実装することを望んでいます。タグがあると思いますが、誤ってコードを変更してコミットしても、同じバージョンのままでいることはできません。ブランチを使用すると、不注意で発生する可能性があります。タグはリリースをマークするためのより安全な方法のようです。
wufoo 2012年

2
私にとってのnvieメソッドの美しさは、最初はそれを理解する必要がないことでした。やりたいことのセクションを見つけてコマンドを入力するだけでいいのです。数回経つと自然になり、数日のうちにプロのように枝の周りを踊っていました!
Killroy

やみくもに適用することでgitflowのアプローチを理解することを望んでいると、状況に適用できるすべての単純化を見逃してしまいます。そして、gitflowは実際にはほとんどのチームに不適切です。
toolforger

151

タグは不変です。

一方、「1.0.0」という名前のブランチを作成できます。つまり、あなたまたはコミット権を持つ誰もが、そのブランチに(意図的にまたは意図せずに)プッシュして、1.0.0の意味を変更することもできます。

タグを作成すると、それをタグで行うことはできません-それだけです。タグ1.0.0はそれを意味し、変更できません*

これがタグとブランチの主な実用的な違いです

* タグを削除して再作成することでタグを変更できますが、偶然ではありません。


18

私は、タグブランチの。タグは、リリースされたコードまたは注目すべき開発ビルドをマークするのに適しています。ブランチは、特定のバージョンに関連するすべての変更を追跡するのに適しています。

このタイプのワークフローに関する優れた記事を次に示します。http://nvie.com/posts/a-successful-git-branching-model/


18

ブランチとタグは同じです(コミットへのポインター、別名"ref")。ただし、ブランチは自動的に次のコミットに移動し、タグは同じコミットで永久に1のままです。

リリースを作成するときは、通常、そのリリースのビルド元のコードの「スナップショット」にマークを付け、コードを進化させ続けてもそのようにマークされたままにするため、タグを使用します。

そのためにブランチを使用しようとすると、誤って、リリースがビルドされていない別のコミットに移動する可能性があります。


1もちろん、タグを削除しない限り。

注:これは古い質問であることに気づきましたが、ブランチとタグの類似性(および1つの重要な違い)が他の回答では明確に具体化されていないと感じました。


@downvoter様、反対投票の具体的な理由はありますか?
Branko Dimitrijevic 2016年

私はあなたの回答に反対票を投じませんでしたが、「ブランチが自動的に次のコミットに移動する」とはどういう意味ですか?ブランチは自動的にコミットに移動しません。実行git commitすると、チェックアウトされたブランチのヘッドが更新されて新しいコミットを参照しますが、他のブランチは「自動的に」次のコミットに移動しません。答えの最初の段落を明確にすべきです。
歯ブラシ

1
@歯ブラシ確かに、それは私が「自動的に動く」という意味です。ただし、ブランチは実際にはコミットを「所有」しておらず、一連のコミットを指し示すこともせず、1つのコミットを指しているだけです(そして、残りは、コミットグラフをたどることによって暗黙的である場合があります)。gitでは、ブランチはの下の1行のファイルで.git\refs\heads、コミットのハッシュが含まれています。コミット自体は、それらを作成したブランチを「記憶」しません。これは、たとえばMercurialとは異なり、ブランチ情報をコミットのメタデータに書き込むことができます。
Branko Dimitrijevic

はい、しかし多くの人はそれを知らない-特にGitで物事を行うためにオンラインで提案されている無数の方法について混乱している新人。
歯ブラシ

6

タグを使用して、履歴内の重要なコミットを記録します。「これは、ビルドサーバーが故障した雨の木曜日にこのバージョンに使用した正確なコミットでした。」タグの代わりにブランチを使用する場合、使用した正確なコミットを知ることはできません。コミットの正確なハッシュを手動で書き留めない限り、「このブランチのどこかにバージョン1.1.0をリリースした」ことだけがわかります。そのため、最初にタグを使用します:)


4
彼は、1.1.0という名前のブランチを作成し、それをもう使用しないことを意図していたので、名前付きバージョンのプロジェクトを表します。
Hakan Deryal 2012年

2

他の答えに加えて、これは私の2セントです。

短い回答:リリースバージョンのタグを使用する

長い答え:リリースのバージョン管理にタグを使用することは、ブランチを使用するよりも特に優れていると思います。リリースを更新する必要がある場合は、タグ付けされたコミットから分岐し、その分岐(おそらく修正プログラムの分岐)での作業が終了したら、新しいバージョンの新しい分岐の先頭に新しいタグを作成します。次に、ブランチをmaster / developにマージします。これは、ソースコードにマージする必要がある可能性のある修正プログラムでない限り、リリースバージョンを変更するべきではないためです。次に、不要になったブランチを削除します。その新しいバージョンに別の修正プログラムを適用する必要がある場合は、同じ手順を繰り返します。

修正プログラムを作成者のGitワークフローとマージする方法を示す次の記事のセクションを参照してください-https ://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2

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