是否可以在 git repo 上设置一个策略,禁止将轻量级标签推送到它?
问问题
1563 次
2 回答
4
Git钩子页面提到:
默认更新钩子在启用时——并且
hooks.allowunannotated
配置选项未设置或设置为 false——防止推送未注释的标签。
这反过来又引用了Chris Johnsen在评论中提到的内容。update.sample
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
于 2011-07-22T06:19:08.103 回答
1
从git push
. 有时,您无权在远程存储库上安装挂钩;据我所知,GitHub 就是这种情况(它允许推送轻量级标签)。
为了防止从本地存储库推送轻量级标签,您可以将其添加到阅读循环的主体中.git/hooks/pre-push
,复制自pre-push.sample
:
case "$local_ref" in
refs/tags/*)
if [ `git cat-file -t "$local_ref"` == 'commit' ]
then
echo >&2 "Tag $local_ref is not annotated, not pushing"
exit 1
fi
;;
esac
但是,我认为最好的解决方案是回避整个问题。带注释的标签可以与可以访问这些标签的任何参考一起自动推送。配置变量push.followTags
启用了这种行为,所以你可以默认做正确的事情,几乎不需要显式推送标签:
git config --global push.followTags true
于 2015-10-25T22:56:10.067 回答