web-dev-qa-db-ja.com

Gitタグの日時を取得する

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

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

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

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

67
HNygard

--formatgit log引数を使用します。

git log -1 --format=%ai MY_TAG_NAME
56
user4815162342

これは常に私のために働いた:

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

別の日付フォーマットを使用する場合は、フォーマット文字列の詳細について、git-logマンページの「PRETTY FORMATS」セクションを参照してください。

66
Nikos C.

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

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

24
Rob Shearer

もう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'
_
20
non sequitor

これを行うためのgit tagコマンドには単純なオプションはありません。実行するのが最も便利だと思う

git log --decorate=full

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

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

詳細については

git help log
2
VojtaK

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

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

gawkが気に入らない場合は、dateを使用してUNIX時間を変換できます。

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

および例(dnsmasq git 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
1
vladis