軽量タグがプッシュされないようにするポリシーをgitリポジトリに設定することは可能ですか?
2 に答える
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
;;
update フックは、 の観点から受信 (リモート) リポジトリで呼び出されます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