Gitにタグがあるのはなぜですか?


8

私はGitの分岐とタグ付けのベストプラクティスgitタグ付けのコメント-ベストプラクティスを読みましたが、長い間疑問に思っていたものに対する直接的な回答がありません。

Gitにタグがあるのはなぜですか?(枝だけではなく)

彼らは二流の市民、または少なくとも「異なる」ようです。明示的に指定しない限り、プッシュされません。リモートタグを削除しても、ダウンストリームレポジトリは削除されません。

この最後のポイントは最近問題になりました。誰かが別のリポジトリからの大量のコミットで大量のガベージタグをプッシュしたためです。上流でそれらを削除してコミットをgit push --tagsGCすることもできますが、それは反映されず、次に誰かがでタグをプッシュしたときに、それらのガベージタグとコミットを再プッシュします。そのため、全員が削除したことを確認する必要がありました。

いつ、なぜブランチではなくタグを使用するのですか?


1
1つには、タグに注釈を付けることができますが、ブランチにはできません。タグは一般に「永続的な」ものです(通常、プロジェクトの特定のバージョンをマークするため)。
Rufflewind 2015年

回答:


10

これは意図的に行われます。

彼らは二流の市民、または少なくとも「異なる」ようです。明示的に指定しない限り、プッシュされません。リモートタグを削除しても、ダウンストリームレポジトリは削除されません。

gitのデフォルトが間違っているというlxrecの回答に同意しません。メーリングリストをフォローすると、git開発者が実用的なデフォルト設定を実際に気にしていることがわかります。--ff-onlyデフォルトとして持つことは理にかなっていますか?私はそうは思いません。

タグを使用すると、独自のローカル開発コピーに注釈を付けることができます。私は見たくないwhy_does_it_break_heretodo_fix_formatting(それらが実際のタグ名ではありません)タグは、私の同意なしに押されます。一方、リリースにタグを付けることはそれほど頻繁には行われず、明示的なプッシュを必要とする(またはエイリアスを使用する)ことは理にかなっています。

プッシュ/フェッチがどのように動作するかについて、タグとブランチの間に大きな違いはありません。あなたの例では、ガベージタグがブランチであった場合、削除は意図したとおりに伝播しますか?

いつ、なぜブランチではなくタグを使用するのですか?

一般的に言って:

  • ブランチはツリー用です:それらは時間の経過とともに異なるコミットを指します
  • タグは個々のコミット用であり、不変です(これにはリリースなどの凍結ツリーが含まれます)

注釈付きタグと署名付き注釈付きタグ(つまり、たとえば公開リリースのタグ付けに実際に使用されるタグ)がデフォルトでプッシュされていませんか?デフォルトではプッシュされないのは、注釈が付いていない「ローカル」タグだけです。なぜなら、あなたが言ったように、それらはローカルだからです。
イェルクWミッターク

@JörgWMittag私はチェックしませんでしたが、これはあなたを信頼しています。ちょっと待ってください、つまり、gitには適切なデフォルトがありますか?
コアダンプ2015年

@JörgWMittagそこで、私はローカルに別のディレクトリにある2つのリポジトリを試しましたが、アノテーション付きタグもプッシュされたアノテーション付きタグもありませんでした。これはgit 1.8.2に対応しています。
コアダンプ2015年

あ、待って。注釈付きで署名されたタグはで自動的にプッシュされるとgit push --tags思いますが、ローカルタグはプッシュしません。私が怒ってgitを使用してからしばらく経ちましたが、それはGit 1.0よりもずっと前のことです。
イェルクWミッターク

1

1)Gitタグはなぜ二流市民なのですか?

残念なことに、gitには多くの悪いデフォルトがあります。私が好きなだけで、それは単に初心者に優しいツールでも直感的なツールでもありません。だれもがgit configs、エイリアス、または--options(--ff-onlyなど)を数十個使用するスクリプトを設定して、gitが実際に望んだとおりに動作するようにしなければなりません。タグはもう1つの例にすぎません。

2)なぜブランチではなくgitタグを使用するのですか?

ブランチは、他のコミットをその上に置くコミットをマークすることを目的としています。そのブランチに新しいコミットを作成すると、ブランチ自体が「移動」して、新しいコミットを指すようになります。

一方、タグはコミットをマークし、その後同じコミットをほぼ永久に(理論的には)マークし続けます。最も一般的な使用法は、新しいバージョンを本番環境にロールアウトするたびに、公式リリースバージョンでコミットにタグを付けることです。

リリースバージョンにはブランチとタグの両方を使用します。ブランチはメジャー/マイナーバージョンを表すだけですが、タグはそのメジャー/マイナーバージョン内のパッチ/ビルドリリースを指定します。そのため、古いバージョンにバグ修正を適用する必要がある場合は、バグ修正コミットをマスターから適切なブランチにチェリーピックし、展開中に取得した新しいバージョン番号を新しいコミットにタグ付けします。

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