Отключить удаление тега - PullRequest
14 голосов
/ 17 июня 2011

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

Есть ли решение, подобное зацепке или чему-то еще?

1 Ответ

20 голосов
/ 17 июня 2011

git help hooks содержит документацию о крючках. Хук update вызывается, когда Git собирается создать / переместить / удалить ссылку. Он вызывается один раз для каждой ссылки, подлежащей обновлению, и получает:

  • 1-й аргумент: имя ссылки (например, refs / tags / v1.0)
  • 2-й аргумент: SHA1 объекта, на который в данный момент указывает ссылка (все нули, если ссылка в данный момент не существует)
  • 3-й аргумент: SHA1 объекта, где пользователь хочет, чтобы ссылка указывала на точку (все нули, если ссылка должна быть удалена).

Если ловушка завершается с ненулевым кодом выхода, git не обновит ссылку, и пользователь получит ошибку.

Итак, чтобы решить вашу конкретную проблему, вы можете добавить следующее к вашей update ловушке:

#!/bin/sh

log() { printf '%s\n' "$*"; }
error() { log "ERROR: $*" >&2; }
fatal() { error "$*"; exit 1; }

case $1 in
    refs/tags/*)
        [ "$3" != 0000000000000000000000000000000000000000 ] \
            || fatal "you're not allowed to delete tags"
        [ "$2" = 0000000000000000000000000000000000000000 ] \
            || fatal "you're not allowed to move tags"
        ;;
esac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...