Estou usando pre-receive hooks no GIT (usando o bash no Linux) para filtrar o push que é permitido em meu repositório.
Eu preciso filtrar o empurrão que os desenvolvedores fazem em meu repositório GIT, permitindo apenas empurrado com esses requisitos ( # é o número):
# Commits > 0 && # Tags != 0 : NÃO # Commits > 0 && # Tags == 0 : SIM # Commits == 0 && # Tags > 1 : NÃO # Commits == 0 && # Tags == 1 & & Key is correct : SIM Considere as filiais e outras operações como commits. Você só pode enviar uma única tag usando a tecla direita (especificada no comentário da tag). Você não pode empurrar uma tag com outros elementos.
O problema é que $refname tem apenas o ref de HEAD, portanto, se você fizer esta ordem:
Commit Tag (para qualquer revisão, mesmo oldies) Commit O $refname apontará para a última referência (ou seja, /refs/heads/master ), assim:
if [[ "$refname" == "refs/tags/"* ]]; then
...
fi
Não funciona na ordem mencionada. Eu tentei iterar através de referências usando rev-list e for-each-ref , sem sucesso.
Como eu poderia processar o envio recebido, sabendo o número de tags (e recebendo o comentário de cada um) para satisfazer as condições superiores?
PS: Considere também a situação de empurrar com a opção --all, recebendo mais de uma ramificação.