在预接收时获取 Git Push 中的新标签

在预接收时获取 Git Push 中的新标签

我正在使用pre-receiveGIT 中的钩子(在 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-list和迭代引用for-each-ref,但没有成功。

我该如何处理收到的推送,了解标签的数量(并获取每个标签的评论)以满足上限条件?

PS:还要考虑使用--all选项推送的情况,接收多个分支。

相关内容