Как мне реагировать на новые теги в git hooks? - PullRequest
26 голосов
/ 28 апреля 2011

Я бы хотел установить Git-хук, который создает структуру каталогов в стиле CDN на основе входящих тегов.Так, например, если последним тегом в локальном репозитории является «v1.2.1» и я извлекаю коммит с «v1.2.2», он должен увидеть новый тег и клонировать репозиторий в новый напрямую (../1.2.2) соответственно.

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

Спасибо!

1 Ответ

32 голосов
/ 28 апреля 2011

Теги являются ссылками, как и любые другие (например, коммит).
Если теги помещаются в репозиторий с помощью ловушки после получения , эта ловушка будет вызвана и выведет список всех обновленных ссылок,это и старые, и новые значения всех ссылок в дополнение к их именам (на его стандартном вводе).

См. этот сервер переписка по электронной почте ловушка, например.

#!/bin/sh

. $(dirname $0)/functions

process_ref() {
    oldrev=$(git rev-parse $1)
    newrev=$(git rev-parse $2)
    refname="$3"

    set_change_type
    set_rev_types
    set_describe_tags

    case "$refname","$rev_type" in
      refs/tags/*,tag)
        # annotated tag
        refname_type="annotated tag"
        function="atag"
        short_refname=${refname##refs/tags/}
        # change recipients
        if [ -n "$announcerecipients" ]; then
          recipients="$announcerecipients"
        fi
      ;;
    esac 
}

while read REF; do process_ref $REF; done

Чтобы это работало, вы также должны установить файл функций из вышеупомянутого примера репозитория ловушек.

...