Требовать аннотированные теги и отклонять легкие теги на git push - PullRequest
3 голосов
/ 21 июля 2011

Можно ли настроить политику для git-репо, которая запрещает добавление в нее легких тегов?

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Страница Git hook упоминает:

Хук обновления по умолчанию, когда он включен - и с параметром конфигурации hooks.allowunannotated, не установленным или установленным в значение false, предотвращает нажатие аннотированных тегов.

Это, в свою очередь, ссылается на update.sample Крис Джонсен , упоминаемый в комментариях.

case "$refname","$newrev_type" in
    refs/tags/*,commit)
        # un-annotated tag
        short_refname=${refname##refs/tags/}
        if [ "$allowunannotated" != "true" ]; then
            echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
            echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
            exit 1
        fi
        ;;
1 голос
/ 26 октября 2015

Хук обновления вызывается в принимающем (удаленном) хранилище с точки зрения git push. Иногда у вас нет доступа для установки хуков в удаленных репозиториях; Насколько я знаю, это касается GitHub (который позволяет легко выдвигать легкие теги).

Чтобы предотвратить отправку облегченных тегов из локального репозитория, вы можете добавить это в тело цикла чтения в .git/hooks/pre-push, как скопировано из pre-push.sample:

case "$local_ref" in
    refs/tags/*)
        if [ `git cat-file -t "$local_ref"` == 'commit' ]
        then
            echo >&2 "Tag $local_ref is not annotated, not pushing"
            exit 1
        fi
        ;;
esac

Однако, на мой взгляд, лучшее решение - обойти всю проблему. Аннотированные теги могут быть автоматически вставлены вместе с любыми ссылками, с которых эти теги доступны. Конфигурационная переменная push.followTags включает это поведение, так что вы можете делать правильные вещи по умолчанию и вряд ли когда-либо явно вставлять теги:

git config --global push.followTags true
...