現在のコミットにタグを付けたい場合。次の両方のコマンドラインが機能することを知っています。
git tag <tagname>
そして
git tag -a <tagname> -m '<message>'
これらのコマンドの違いは何ですか?
コマンドの違いは、1つはタグメッセージを提供し、もう1つは提供しないことです。注釈付きタグにはgit-show(1)で表示できるメッセージがありますが、注釈なしのタグはコミットへの名前付きポインターにすぎません。
documentation :「軽量タグを作成するには、-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フラグを渡して提供されたメッセージを使用したかのように動作します。基本的には、タグに注釈とそれに関連するその他の情報を持たせるかどうかになります。
注釈付きタグをプッシュし、軽量ローカルを維持します
man git-tag
言う:
注釈付きタグはリリース用、軽量タグはプライベートまたは一時的なオブジェクトラベル用です。
また、特定の動作は、この推奨事項が有用な方法でそれらを区別します:
注釈付きタグには、それらが指すコミットとは異なるメッセージ、作成者、および日付を含めることができます。したがって、リリースをコミットせずにリリースを記述するためにそれらを使用できます。
軽量タグにはそのような追加情報はなく、開発のために自分で使用するだけなので、必要ありません。
git describe
は、注釈付きタグのみを表示します内部の違い
軽量タグと注釈付きタグの両方は、SHA-1を含む.git/refs/tags
の下のファイルです
軽量タグの場合、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 <[email protected]> 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
を出力します。
軽量タグのみをリスト: すべての軽量タグをリストするにはどうすればよいですか?
bigの違いは完全に説明されています here 。
基本的に、軽量タグは特定のコミットへの単なるポインタです。 これ以上情報は保存されません;一方、注釈付きタグは通常のオブジェクトであり、作成者と日付があり、独自のSHAキーがあるため参照できます。
whoタグ付きwhatおよびwhenが必要な場合は、注釈付きタグを使用します。 開発の特定のポイントにタグを付けたいの場合、誰がいつそれを行ったとしても、軽量タグで十分です。
通常は注釈付きタグを使用しますが、実際にはプロジェクトのGitマスター次第です。