gitタグの日時を取得する


88

gitを使用しているプロジェクトがあり、すべてのリリースにタグを付けています。

$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3
v1.1.0

私の目標は、リリースとリリース日をWebインターフェイスに一覧表示することです(タグ/コミット日=リリース日)。現在、を使用してすべてのリリースを一覧表示していますgit tag

タグが作成された日時(またはタグが指すコミット)を取得するにはどうすればよいですか?


2
ここで正確に言うと、それはあなたが求めているタグのコミット日です。タグには日付がないため。
jobwat 2017年


回答:


71

--format引数を使用してgit log

git log -1 --format=%ai MY_TAG_NAME

3
ヒント-「TAG」をタグ名に置き換えます。たとえば、git log -1 --format=%ai v0.2.3
トビアス

5
あなたはISO8601をしたい場合は、行う--format=%aI(首都「I」)
ハイムEliyah

git log -1 --format=%ai MY_TAG_NAME | catページビューを無効にする
elinx 2018

「-1」は何をしているのですか?
ブレードマスター

@Blademastergit logタグに関連するコミットを1つだけ表示するように指示します。デフォルトの動作では、指定されたコミットからリポジトリ内の最初のコミットまでのすべてのコミットが表示されます。
user4815162342

83

これはいつも私のために働いた:

git log --tags --simplify-by-decoration --pretty="format:%ci %d"

別の日付フォーマットが必要な場合は、フォーマット文字列の詳細について、git-logマンページの「PRETTYFORMATS」セクションを参照してください。


13
ただし、これにはコミットの日付/時刻がリストされますが、注釈付きタグの日付/時刻はリストされません。
WiSaGaN 2014年

5
taglog = log --tags --simplify-by-decoration --pretty='format:%ci %d'.gitconfigファイルの[alias]セクションに(二重引用符ではなく一重引用符で)入力するだけで、git taglogコマンドが得られます:)
Lambart

39

もう1つのオプション:

git for-each-ref --format="%(refname:short) | %(creatordate)" "refs/tags/*"

フォーマットオプションについては、https://git-scm.com/docs/git-for-each-ref#_field_namesを参照してください

%(creatordate) タグが使用時に作成された日付を確認するために、ポイントされたコミットの日付を示します %(taggerdate)

シェルを直接組み込むことができます。

$> git for-each-ref --shell --format="ref=%(refname:short) dt=%(taggerdate:format:%s)" "refs/tags/*"

ref='v1.10' dt='1483807817'
ref='v1.11' dt='1483905854'
ref='v1.12.0' dt='1483974797'
ref='v1.12.1' dt='1484015966'
ref='v1.13' dt='1484766542'
ref='v1.2' dt='1483414377'
ref='v1.3' dt='1483415058'
ref='v1.3-release' dt='' <-- not an annotated tag, just a pointer to a commit so no 'taggerdate', it would have a 'creator date'.
ref='v1.3.1' dt='1483487085'
ref='v1.4' dt='1483730146'
ref='v1.9' dt='1483802985'

3
これは、タグの日付を取得するための最良の回答です。
ジョセフK.シュトラウス

または、git for-each-ref --format="%(taggerdate:unix)" refs/tagsgit for-each-ref --format="%(taggerdate:raw)" refs/tags
RD

1
ありがとうございました!他のすべての回答は、タグの日付ではなく、コミットの日付を示しています。
サム

はいdefoのベストアンサーは、すべてのコミットではなく実際のタグのみを表示するため、恥ずかしがり屋のSOは他のアンサーの評価が高くなっています。
samthebest 2018

2
少ないタイピングと同じ結果:git tag --format "%(refname:short) %(creatordate:short)"
アンドリュースペンサー

27

上記の両方のソリューションでコミット日が取得されることに注意してください。これは、そのコミットがリリース用にタグ付けされたときとは大きく異なる可能性があります。タグ自体の日付を取得するには、でタグ自体を検索しrev-parse、で読み取ってcat-fileから解析する必要があります。小さなパイプライン:

git rev-parse v1.0.0 | xargs git cat-file -p | egrep '^tagger' | cut -f2 -d '>'


良い、唯一の問題は、結果がフォーマットされていないことです(1419372909 -0300)
Jose_GD 2014

rev-parseからコミットIDを取得したら、次のことができると思います。gitrev-parse v1.0.0 | xargs git show -s --pretty =%aI
キース

@Keithこれで、少なくとも注釈付きタグについては、タグ付きの日付ではなく、コミットの作成者の日付を表示するようになりました
Ben

3

これを行うための簡単なオプションはgittagコマンドにはありません。走るのが一番便利だと思いました

git log --decorate=full

タグがある場合は、タグを含むすべてのコミットを一覧表示します。タグ付けされたコミットのみを一覧表示するには、

git log --decorate=full --simplify-by-decoration

詳細については、

git help log

2

gawk(ではなくawk)を使用して、「タガー」行の日付を人間が読める形式に変換できます。

git rev-parse v4.4-rc1 | xargs git cat-file -p | gawk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }'

1が気に入らない場合はgawk、その後dateのUNIX時間を変換するために使用することができます。

git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d

および例(dnsmasqgit repo):

$ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print "@" $(NF-1) }' | xargs date -d
Wed May 18 16:52:12 CEST 2016

あなたはあなたの側からこれを試しますか?
Vishal Patel 2015

確かに。動作dnsmasqします。たとえば、git repo: $ git rev-parse v2.76 | xargs git cat-file -p | awk '/^tagger/ { print strftime(PROCINFO["strftime"], $(NF-1)) }' Wed May 18 16:52:12 CEST 2016
vladis 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.