web-dev-qa-db-ja.com

gitタグからタガー情報を読み取るにはどうすればよいですか?

これまでのところ:

git rev-parse <tagname> | xargs git cat-file -p

しかし、これは解析するのが最も簡単なことではありません。 git-log--prettyオプションに似たものを期待していたので、必要な情報だけを取得できました。

何か案は?ありがとう

29
quornian

同じ情報を取得するより直接的な方法は次のとおりです。

git cat-file tag <tagname>

これは単一のコマンドを使用し、パイプを回避します。

私はこれをbashスクリプトで次のように使用しました。

if git rev-parse $TAG^{tag} -- &>/dev/null
then
    # Annotated tag
    COMMIT=$(git rev-parse $TAG^{commit})
    TAGGER=($(git cat-file tag $TAG | grep '^tagger'))
    N=${#TAGGER} # Number of fields
    DATE=${TAGGER[@]:$N-2:2} # Last two fields
    AUTHOR=${TAGGER[@]:1:$N-3} # Everything but the first and last two
    MESSAGE=$(git cat-file tag $TAG | tail -n+6)
Elif git rev-parse refs/tags/$TAG -- &>/dev/null
then
    # Lightweight tag - just a commit, basically
    COMMIT=$(git rev-parse $TAG^{commit})
else
    echo "$TAG: not a tag" >&2
fi
31
Neil Mayhew

git show $TAGは、タグの情報と、タグが指すコミットを表示します。

すでに機能しているものの、入力が難しい場合は、いつでもエイリアスを設定できます。

[alias]
        showtag = !sh -c 'git rev-parse $1 | xargs git cat-file -p' -

そしてそれを次のように呼びます:

$ git showtag my-tag-name
23
mipadi

これはかなり前にすでに回答されていますが、それがもはや最良の解決策ではないにもかかわらず、依然としてトップの検索結果であるため、ここにそれがあります:

コマンド:

git for-each-ref refs/tags/$TAG --Shell --format='
TAG=%(refname)
COMMIT=%(objectname)
TAGGER=%(tagger)
EMAIL=%(taggeremail)
DATE=%(taggerdate)
CONTENTS=%(contents)
'

-Shellは、シェルスクリプトの引用を行います。 -Perl-python-tcl。フォーマット全体をコマンドラインオプションとして記述したくない場合は、それをfile.txtに入れて、次のようにすることもできます。

git for-each-ref refs/tags/<tag> --Shell --format="$(cat file.txt)"

出力:

TAG='refs/tags/4.1.0-RC1'
COMMIT='973cc103f942330550866588177fe53ea5765970'
TAGGER='ml_'
EMAIL='<[email protected]>'
DATE='Fri Sep 16 14:14:50 2016 +0200'
CONTENTS='Release 3:
* INSTALL.md added.
* GIT.md modified.
'

詳細はこちら: https://git-scm.com/docs/git-for-each-ref

8
ml_