370

昨年、日常の VCS を Subversion から Git に切り替えましたが、まだ「Git-think」の細かい点を把握しようとしています。

最近私を悩ませているのは、「軽量」タグと注釈付きタグと署名付きタグです。注釈付きタグが軽量タグよりも優れていることは、実際のすべての用途で広く受け入れられているようですが、私が見つけた理由についての説明は、常に「ベストプラクティスのため」または「それらが異なるため」のいずれかに要約されるようです。 . 残念ながら、それがベスト プラクティスである理由や、それらの違いが私の Git の使用法にどのように関連しているかを知らずに、これらの議論は非常に満足のいくものではありません。

私が最初に Git に切り替えたとき、軽量タグはスライスパン以来最高のもののように思えました。コミットを指して、「それは 1.0 でした」と言うことができました。タグがそれ以上である必要があるかどうかを理解するのに苦労していますが、世界中の Git エキスパートが注釈付きタグを恣意的に好むとは信じられません! それで、騒ぎは何ですか?

(ボーナス ポイント: タグに署名する必要があるのはなぜですか?)

編集

誰がいつタグ付けしたかが重要なのです! フォローアップとして、適切なタグ アノテーションに関するアドバイスはありますか? どちらもgit tag -am "tagging 1.0" 1.0前回のタグ以降のコミットログをまとめてみると戦略に負けそうな気がします。

4

9 に答える 9

293

注釈付きタグの大きな利点は、作成者がわかることです。コミットと同じように、誰がそれを行ったのかを知っておくと便利な場合があります。あなたが開発者で、v1.7.4 がタグ付けされている (準備ができていると宣言されている) のを見て、確信が持てない場合は、誰に相談しますか? 注釈付きタグに名前がある人!(あなたが不信の世界に住んでいるなら、これは人々がタグ付けすべきではないものにタグ付けすることから逃れるのを妨げます.) あなたが消費者なら、その名前は権威の印です.リリースされました。

他のメタデータも役立つ場合があります。最終的なコミットがいつ行われたかだけでなく、そのバージョンがいつリリースされたかを知ると便利な場合があります。また、メッセージが役立つ場合もあります。その特定のタグの目的を説明するのに役立つかもしれません。おそらく、リリース候補のタグには、ステータス/To Do リストが少し含まれています。

タグに署名することは、他のものに署名することとほとんど同じです。偏執狂にもう 1 つのレベルのセキュリティを提供します。私たちのほとんどはそれを使用するつもりはありませんが、そのソフトウェアをコンピューターにインストールする前にすべてを確認したい場合は、必要になるかもしれません。

編集:

タグ注釈に何を書くべきかについては、あなたの言うとおりです - 必ずしも多くの有用なことを言うとは限りません。バージョン番号タグの場合、それがそのバージョンを示していることが暗黙のうちに理解されます。変更ログが別の場所にあることに満足している場合は、そこにタグを付ける必要はありません。この場合、最も重要なのはタガーと日付です。私が考えることができる他の唯一のものは、テストスイートからのある種の承認スタンプです. git.git のタグを見てください。それらはすべて「Git 1.7.3 rc1」のようなものです。私たちが本当に気にかけているのは、浜野純男の名前だけです。

ただし、あまり明確に名前が付けられていないタグの場合、メッセージはより重要になる可能性があります。単一のユーザー/クライアント向けの特定の特別な目的のバージョン、バージョン以外の重要なマイルストーン、または (前述のように) リリース候補に追加情報をタグ付けすることを想像できます。メッセージは、はるかに便利です。

于 2011-02-11T16:59:39.497 に答える
70

そのトピックに関する私の個人的な、わずかに異なる見解:

  • 注釈付きタグは、他の開発者向けに公開されることを意図したタグであり、ほとんどの場合、新しいバージョン (これも署名する必要があります) です。誰がいつタグ付けしたかだけでなく、その理由 (通常は変更ログ) も確認できます。
  • 軽量は私的使用により適しています。つまり、特別なコミットにタグを付けて、それらを再び見つけることができるようにします。それらを確認したり、チェックアウトして何かをテストしたりできます。
于 2011-02-11T21:47:39.283 に答える
29

デフォルトでは、Git は のようなコマンドのベースラインとして注釈付きタグのみを参照しますgit describe。注釈付きタグは、自分自身や他の人にとって永続的な意味を持つ道しるべと考えてください。一方、軽量タグは、後の自分が見つけるブックマークのようなものです。したがって、注釈付きタグは参照として使用する価値がありますが、軽量タグは使用すべきではありません。

タグに署名すると、署名者の身元が保証されます。たとえば、ユーザーは、入手した Linux カーネル コードが、Linus Torvalds が実際にリリースしたコードと同じであることを確認できます。署名は、署名者がそのコミットでソフトウェアの品質と完全性を保証していることを表明することもできます。

于 2011-02-11T16:56:43.760 に答える
10

タグに署名することは、リリースの信頼性を主張する簡単な方法です。

誰でもリポジトリのクローンを作成して履歴を変更できるため (例: git-filter-branch を介して)、これは DVCS で特に役立ちます。タグが署名されている場合、署名は git-filter-branch 操作に耐えられないため、すべてのリリースにタグを付けてコミッターによって署名するというポリシーがある場合、リポジトリで偽のリリース タグを検出することができます。

署名がなければ、注釈付きタグも意味がありません。

于 2011-02-11T17:22:10.163 に答える
6

軽量タグの 1 つの有効な使用方法を見つけました。GitHub でレトロスペクティブにリリースを作成することです。

私たちはソフトウェアをリリースし、必要なコミットを行いましたが、GitHub の「リリース」セクションを維持することを気にしませんでした。そして、少し注意を払ったとき、以前のリリースもいくつか追加したいことに気付きました。それらの古いリリース日は正しいです。

古いコミットに注釈付きタグを作成するだけの場合、GitHub はタグ オブジェクトからリリースの日付を取得します。対照的に、この古いコミットの軽量タグを作成すると、リリースは正しい (古い) 日付を表示し始めました。 ソース @ GitHub ヘルプ、「リリースについて」

注釈付きのコミットに希望の日付を指定することもできるようですが、私にはそれほど単純には見えません: https://www.kernel.org/pub/software/scm/git/docs/git-tag. html#_on_backdating_tags

于 2016-10-28T08:38:16.653 に答える