我正在使用pre-receive
GIT 中的钩子(在 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,所以如果执行这个顺序:
Commit
Tag
(对于任何修订版本,甚至旧版本)Commit
将$refname
指向最后一个引用(即/refs/heads/master
),因此执行以下操作:
if [[ "$refname" == "refs/tags/"* ]]; then ... fi
按照上述顺序无法工作。我尝试使用rev-list
和迭代引用for-each-ref
,但没有成功。
我该如何处理收到的推送,了解标签的数量(并获取每个标签的评论)以满足上限条件?
PS:还要考虑使用--all选项推送的情况,接收多个分支。