35

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

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

ありがとう!

4

1 に答える 1

37

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

たとえば、このサーバーの受信後の電子メールフックを参照してください。

#!/bin/bash

. $(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

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

于 2011-04-27T20:58:00.093 に答える