2016-10-10 1 views
4

コミットが行われたときとコミットが行われたときの時間差を調べたいと思っています。gitタグと元のコミットの時間差をどうやって調整するのですか?

これはこれまでのところ私がこれが正しいフィールドであると考えるcommitterdateがnullであることです。

git for-each-ref --format='%(taggerdate) : %(committerdate) : %(refname)' --sort=-taggerdate --count=10 refs/tags 

私は正しいとは言えませんが、私はタグだけを見ています。理想的な世界では、それは可能でない場合、私は後でこれを行うことができます時間の違いを示すだろう。

+0

タグ...軽量一つまたは注釈付き(これら2つの違いは^{}は、そのツリーやBlobオブジェクトを見つけ、成功する一方で、究極の目標オブジェクトが、木やブロブである場合。^{commit}に失敗するということです) 1? (https://git-scm.com/book/en/v2/Git-Basics-Tagging#Annotated-Tags) – VonC

+0

チームの都市を経由して設定された注釈付きタグです – John

答えて

3

The git for-each-ref documentationは一種の誤解を招くようです:

のコミットとタグオブジェクトは、特別なcreatordatecreatorフィールドが依存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}という接尾辞を持つタグ名を解決する必要があります。

+0

ありがとうございます – John

関連する問題