web-dev-qa-db-ja.com

gitフックの新しいタグにどのように反応しますか?

着信タグに基づいてCDNスタイルのディレクトリ構造を作成するgitフックを設定したいと思います。したがって、たとえば、ローカルリポジトリの最後のタグが「v1.2.1」で、「v1.2.2」でコミットをプルすると、新しいタグが表示され、リポジトリが新しいものに直接複製されます(../1.2 .2)それに応じて。

これをポストレシーブに添付したいと思っていますが、受信タグの読み取り方法に関するgitフックに関するドキュメントには何も見つかりません。それらは別のフックで配信されますか?新しいコミットに新しいタグがあるかどうかを確認するために、実際にシェルスクリプトでgitコマンドを実行する必要がありますか?

ありがとう!

28
futuraprime

タグは他のタグと同じように(コミットのように)参照です。
タグが 受信後フック でリポジトリにプッシュされると、そのフックが呼び出され、更新されたすべての参照、つまり、のすべての参照の古い値と新しい値の両方が一覧表示されます。それらの名前に加えて(標準入力で)。

このサーバーを参照してください 受信後の電子メール フックなど。

#!/bin/sh

. $(dirname $0)/functions

process_ref() {
    oldrev=$(git rev-parse $1)
    newrev=$(git rev-parse $2)
    refname="$3"

    set_change_type
    set_rev_types
    set_describe_tags

    case "$refname","$rev_type" in
      refs/tags/*,tag)
        # annotated tag
        refname_type="annotated tag"
        function="atag"
        short_refname=${refname##refs/tags/}
        # change recipients
        if [ -n "$announcerecipients" ]; then
          recipients="$announcerecipients"
        fi
      ;;
    esac 
}

while read REF; do process_ref $REF; done

これを機能させるには、前述のフックリポジトリの例から 関数ファイル をインストールする必要もあります。

34
VonC