現在のコミットにタグを付けたい場合。次のコマンドラインの両方が機能することを知っています:
git tag <tagname>
そして
git tag -a <tagname> -m '<message>'
これらのコマンドの違いは何ですか?
現在のコミットにタグを付けたい場合。次のコマンドラインの両方が機能することを知っています:
git tag <tagname>
そして
git tag -a <tagname> -m '<message>'
これらのコマンドの違いは何ですか?
回答:
コマンドの違いは、1つはタグメッセージを提供し、もう1つは提供しないことです。注釈付きのタグにはgit-show(1)で表示できるメッセージがありますが、注釈なしのタグはコミットへの名前付きポインターにすぎません。
ドキュメントによると、「軽量のタグを作成するには、-a、-s、または-mオプションを指定せず、タグ名を指定してください」。注釈付きタグにメッセージを書き込むためのいくつかの異なるオプションもあります。
git tag <tagname>
、Gitは現在のリビジョンでタグを作成しますが、注釈を求めるプロンプトを表示しません。メッセージなしでタグ付けされます(これは軽量タグです)。git tag -a <tagname>
、メッセージを提供するために-mフラグも使用していない限り、Gitは注釈を要求します。git tag -a -m <msg> <tagname>
、Gitはコミットにタグを付け、提供されたメッセージで注釈を付けます。git tag -m <msg> <tagname>
、Gitは、注釈に-aフラグを渡して提供されたメッセージを使用するかのように動作します。基本的には、タグに注釈やその他の情報を関連付けるかどうかだけです。
git tag -a <tag> -m ''
)を使用できますが、注釈付きタグには常にタガー(作成者)と日付があります。
git push --follow-tags
、注釈付きのタグのみがプッシュされることです。
注釈付きタグをプッシュし、軽量ローカルを維持する
man git-tag
言う:
注釈付きタグはリリース用であり、軽量タグはプライベートまたは一時的なオブジェクトラベル用です。
また、特定の動作は、この推奨事項が役立つ方法でそれらを区別します。例:
注釈付きタグには、メッセージ、作成者、およびそれらが指すコミットとは異なる日付を含めることができます。したがって、リリースコミットを行わずに、それらを使用してリリースを説明できます。
軽量のタグには追加の情報はなく、開発に自分で使用するだけなので、それを必要としません。
git describe
コマンドラインオプションがない場合、注釈付きのタグのみが表示されます内部の違い
軽量タグと注釈付きタグの両方が.git/refs/tags
SHA-1を含むファイルです
軽量タグの場合、SHA-1はコミットを直接指します。
git tag light
cat .git/refs/tags/light
HEADのSHA-1と同じように印刷します。
したがって、他のメタデータを含めることができないのも不思議ではありません。
注釈付きタグは、オブジェクトデータベース内のタグオブジェクトを指します。
git tag -as -m msg annot
cat .git/refs/tags/annot
注釈付きタグオブジェクトのSHAが含まれます。
c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
その後、次のようにしてコンテンツを取得できます。
git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
出力例:
object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
type commit
tag annot
tagger Ciro Santilli <your@mail.com> 1411478848 +0200
msg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
<YOUR PGP SIGNATURE>
-----END PGP SIGNAT
これが追加のメタデータを含む方法です。出力からわかるように、メタデータフィールドは次のとおりです。
形式の詳細な分析は次の場所にあります:gitタグオブジェクトの形式とそのSHAの計算方法
ボーナス
タグに注釈が付いているかどうかを確認します。
git cat-file -t tag
アウトプット
commit
軽量の場合、タグオブジェクトがないため、直接コミットを指しますtag
注釈付きの場合、その場合はタグオブジェクトがあるため