The git for-each-ref
documentationは一種の誤解を招くようです:
のコミットとタグオブジェクトは、特別なcreatordate
とcreator
フィールドが依存committer
またはtagger
フィールドから適切な日付や名前、電子メールの日付タプルに対応させていただきますオブジェクトタイプ。これらは、注釈付きタグと軽量タグを組み合わせて作業するためのものです。
これは正確に文書化されています:%(creatordate)
は、これらの注釈付きタグのtagger
フィールドから日付を取得します。しかし、は、のように、注釈付きタグの場合、Gitは対応するコミットを検査する可能性があります。そうでない場合は、committer
をどのように取得しますか?
実際には、for-each-ref
は、注釈付きタグのターゲットオブジェクトでと直接一致しません。committer
フィールドの記述は、軽量タグ(コミットを指す)タグに固有であり、注釈付きタグオブジェクトではなくです。幸いなことに、書式ディレクティブは、間接的に見えるようになっています。単にディレクティブの先頭に*
という接頭辞を付けるだけです。
従って答えは:
git for-each-ref \
--format='%(taggerdate) : %(*committerdate) : %(refname)' \
--sort=-taggerdate --count=10 refs/tags
軽量タグは、木又はブロブを直接ポイントすることができます。この場合に何が起こるかはすぐに分かりません。おそらく展開は空です。この唯一のインダイレクトが後、注釈付きタグのターゲットが別のタグ(または木またはBLOB)であれば、いかなるコミッター日付フィールドがないこと
注意。これを本当に信頼できるものにするには、少しシェルスクリプトを使用して、^{}
または^{commit}
という接尾辞を持つタグ名を解決する必要があります。
タグ...軽量一つまたは注釈付き(これら2つの違いは
^{}
は、そのツリーやBlobオブジェクトを見つけ、成功する一方で、究極の目標オブジェクトが、木やブロブである場合。^{commit}
はに失敗するということです) 1? (https://git-scm.com/book/en/v2/Git-Basics-Tagging#Annotated-Tags) – VonCチームの都市を経由して設定された注釈付きタグです – John