在Git中获取新标签推送预先接收

我在GIT中使用pre-receive钩子(在Linux上使用bash)来过滤允许进入我的仓库的推送。

我需要过滤开发者对我的GIT仓库的推动,只需要按下这些必要条件即可( #是数字):

  • # Commits > 0 && # Tags != 0 :不
  • # Commits > 0 && # Tags == 0 :是的
  • # Commits == 0 && # Tags > 1 :否
  • # Commits == 0 && # Tags == 1 && Key is correct :是的

考虑与提交相同的分支和其他操作。 您只能使用正确的键(在标签注释中指定)推送单个标签。 您不能用其他元素推送标签。

问题是$refname只有HEAD ref,所以如果你这样做的话:

  1. Commit
  2. Tag (任何修订,甚至老年人)
  3. Commit

$refname将指向最后一个引用(即/refs/heads/master ),这样做:

if [[ "$refname" == "refs/tags/"* ]]; then ... fi

将不会在提到的顺序工作。 我尝试使用rev-listfor-each-ref遍历引用,但没有成功。

我怎么能处理被接收的推送,知道标签的数量(并获得每个评论)以满足上面的条件?

PS:还可以考虑推出 – all选项,接收多个分支的情况。