在GitLab中是否有一种方式或设置,可以允许用户从预先批准的分支创建标签?换句话说,如果我尝试在GitLab上创建一个新的标签,我会得到一个特定的Git修订版本列表,供“从中创建”字段选择。
不,GitLab中不存在这个功能。
就git而言,标签与分支根本没有关联,只与提交有关。因此,当一个标签被推送时,你永远无法确定使用了哪个具体的分支。
如类似问题所述:
你可以找到标签所属的分支。
问题在于:一个标签可能被多个分支引用(成为历史的一部分)。
因此,你可以找到标签属于哪些分支。最接近这个功能的可能是在标签流水线中添加一个作业来验证已标记的提交是否存在于预先批准的分支之一。但是,这不会影响GitLab UI中的任何下拉菜单。除非你使用pre-receive hook(仅适用于自托管的GitLab),否则它也无法阻止标签推送开始。
你可以选择包含这样的CI作业:
check_tags:
stage: .pre
# only allow tag pipelines to succeed if the tagged commit is
# in an acceptable branch
rules:
- if: $CI_COMMIT_TAG
script:
- allowed_branches='(main|release\/*)'
# get all the branches for this tag
- branches="$(find-branches "${CI_COMMIT_TAG}")" # you implement this
- |
for branch in $branches; do
if [[ $branch =~ $allowed_branches ]]; then
exit 0 # branch is allowed, exit gracefully
fi
done
# tag does not exist in any allowed branch
exit 1
如果你真的想要,甚至可以让工作从仓库中删除标签。
如果你在 pre-receive hook 中使用相同的逻辑,它可以防止标签被创建。