1. ホーム
  2. git

[解決済み] あるgitタグが注釈付きか軽量かを見分けるにはどうしたらいいですか?

2023-02-26 19:24:14

質問

私のタイプ git tag と入力すると、現在のタグが一覧表示されます。

1.2.3
1.2.4

どれがアノテーションで、どれが軽量かを判断するにはどうしたらよいでしょうか?

どのように解決するのですか?

git for-each-ref は、それぞれの参照先がデフォルトで何であるか、そのidとtypeを教えてくれます。タグだけに制限するには、次のようにします。 git for-each-ref refs/tags .

[T]出力は3つのフィールドを持っています。オブジェクトのハッシュ、オブジェクトのタイプ、そしてオブジェクトを参照するrefs/tagsの名前です。いわゆる "lightweight"タグは、refs/tags 内の名前であり、それは commit オブジェクトを指す名前です。注釈付きタグ(quot;annotated" tag)は、refs/tags 内の名前であり、これは tag オブジェクトを指す名前です。

- ソロモン・スロー (コメント中)

以下はその一例です。

$ git for-each-ref refs/tags                                           
902fa933e4a9d018574cbb7b5783a130338b47b8 commit refs/tags/v1.0-light
1f486472ccac3250c19235d843d196a3a7fbd78b tag    refs/tags/v1.1-annot
fd3cf147ac6b0bb9da13ae2fb2b73122b919a036 commit refs/tags/v1.2-light

これを1つのrefに対してだけ行うには git cat-file -t をローカルの参照に追加することで、例を続けることができます。

$ git cat-file -t v1.0-light
commit
$ git cat-file -t v1.1-annot
tag


タグはあらゆる Git オブジェクトを参照することができます。もしバディに一つのファイルだけを取得させ、レポに git サーバーがあれば git tag forsam :that.file で、Sam がファイルを取得して表示することができます。便利なコマンドのほとんどは、タグ付けされた blob やツリーをどう扱えばいいのかわかりません。