Gitで新しいブランチがチェックアウトされた後にフックをトリガーする方法はありますか?
質問
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つのパラメーターが与えられます...
例:
-
フック(スクリプト)を作成します:
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
-
サンプルコンテンツのフック:
#!/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つのパラメーターを受け取ります。
- 以前のHEADの参照
- 新しいHEADの参照
- これがファイルチェックアウト(
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 新しいブランチを作成することは検出されません。