я использую pre-receive
хуки в GIT (с использованием bash в Linux), чтобы отфильтровать push, которые разрешены в моем репо.
Мне нужно отфильтровать толчок, который разработчики делают в моем репозитории GIT, позволяя просто нажать с этими реквизитами (#
это число):
# Commits > 0 && # Tags != 0
: НЕТ# Commits > 0 && # Tags == 0
: ДА# Commits == 0 && # Tags > 1
: НЕТ# Commits == 0 && # Tags == 1
&& Key is correct
: ДАСчитайте ветви и другие операции такими же, как коммиты. Вы можете нажать только один тег, используя правую клавишу (указанную в комментарии к тегу). Вы не можете проталкивать тег с другими элементами.
Проблема в том, что $refname
есть только HEAD ref, поэтому, если вы сделаете этот заказ:
Commit
Tag
(до любой доработки, даже старичков)Commit
В $refname
будет указывать на последнюю ссылку (т.е. /refs/heads/master
), так поступаем:
if [[ "$refname" == "refs/tags/"* ]]; then
...
fi
Не будет работать в указанном порядке. Я пытался перебирать ссылки, используя rev-list
и for-each-ref
, безуспешно.
Как я мог обработать полученный push, зная количество тегов (и получив комментарий к каждому из них), чтобы удовлетворить верхним условиям?
PS: Рассмотрим также ситуацию нажатия с параметром --all, получение более одной ветки.