Gitで新しいブランチがチェックアウトされた後にフックをトリガーする方法はありますか?

StackOverflow https://stackoverflow.com/questions/1011557

  •  06-07-2019
  •  | 
  •  

質問

Gitで新しいブランチがチェックアウトされた後にフックをトリガーする方法はありますか?

役に立ちましたか?

解決

これらのフックのいずれかが成功しない場合、私は驚くでしょう:

https://schacon.github.io/git/githooks.html

おそらくこれ

  

チェックアウト後

     

このフックは、   git-checkoutは以下を実行した後に実行されます   ワークツリーを更新しました。フックは   次の3つのパラメータが与えられます。   前のHEAD、新しいHEADの参照   (変更されている場合と変更されていない場合があります)、   そして、   チェックアウトはブランチチェックアウトでした   (ブランチの変更、flag = 1)またはファイル   チェックアウト(ファイルを   インデックス、フラグ= 0)。このフックはできません   git-checkoutの結果に影響します。

他のヒント

gitフックは、リポジトリの特別な場所に配置されるスクリプトです。その場所は次のとおりです。

  

.git / hooks

スクリプトは、bash、python、rubyなど、環境内で実行できる任意の種類にすることができます

チェックアウト後に実行されるフックは、チェックアウト後です。ドキュメントから:

  

...フックには3つのパラメーターが与えられます...

例:

  1. フック(スクリプト)を作成します:

    touch .git/hooks/post-checkout
    chmod u+x .git/hooks/post-checkout
    
  2. サンプルコンテンツのフック:

#!/bin/bash                                                                      

set -e                                                                           

printf '\npost-checkout hook\n\n'                                                

prevHEAD=$1                                                                      
newHEAD=$2                                                                       
checkoutType=$3                                                                  

[[ $checkoutType == 1 ]] && checkoutType='branch' ||                             
                            checkoutType='file' ;                                

echo 'Checkout type: '$checkoutType                                              
echo '    prev HEAD: '`git name-rev --name-only $prevHEAD`                       
echo '     new HEAD: '`git name-rev --name-only $newHEAD`

注:最初の行のシバンは、スクリプトのタイプを示しています。

このスクリプト(gitフック)は、渡された3つのパラメーターのみをキャプチャし、人間に優しい形式で印刷します。

他と同様ですが、ブランチが一度チェックアウトされたことを確認します。

#!/bin/bash

# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi

BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`

#if the refs of the previous and new heads are the same 
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2"  ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
    git push origin ${BRANCH_NAME}
fi

post-checkout フックは3つのパラメーターを受け取ります。

  1. 以前のHEADの参照
  2. 新しいHEADの参照
  3. これがファイルチェックアウト( 0 )かブランチチェックアウト( 1 )か

現在のHEADから作成されたブランチは、パラメーター1と2に同じ値を持つという事実を使用できます。

cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then 
  echo "New branch created. (Probably)."
fi
EOF

chmod u+x .git/hooks/post-checkout

制限:

  • 現在のHEADと同じHEADにある既存のブランチをチェックアウトすると、だまされます。
  • 現在のHEADから not 新しいブランチを作成することは検出されません。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top