Как мне прочитать информацию о тегере из тега git? - PullRequest
25 голосов
/ 15 ноября 2010

Пока у меня есть:

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

но это не самая простая вещь для разбора. Я надеялся на что-то похожее на git-log '--pretty вариант, чтобы я мог получить только необходимую информацию.

Есть идеи? Спасибо

Ответы [ 3 ]

31 голосов
/ 10 апреля 2014

Более прямой способ получить ту же информацию:

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
22 голосов
/ 15 ноября 2010

git show $TAG покажет вам информацию для тега, а также фиксацию, на которую он указывает.

Если у вас есть что-то, что уже работает для вас, но неудобно для ввода, вы всегда можете установитьпсевдоним:

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

И назовите его с помощью:

$ git showtag my-tag-name
8 голосов
/ 21 сентября 2016

На этот вопрос уже давно дан ответ, но он по-прежнему является лучшим результатом поиска, хотя это уже не лучшее решение, поэтому здесь оно звучит так:

Команда:

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

- shell цитирует сценарии 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='<ml@example.org>'
DATE='Fri Sep 16 14:14:50 2016 +0200'
CONTENTS='Release 3:
* INSTALL.md added.
* GIT.md modified.
'

Больше информации здесь: https://git -scm.com / документы / ГИТ-за-каждый-исх

...