4

軽量タグがプッシュされないようにするポリシーをgitリポジトリに設定することは可能ですか?

4

2 に答える 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

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
于 2015-10-25T22:56:10.067 に答える