Gitで新しいブランチがチェックアウトされた後にフックを起動する方法はありますか?Gitで新しいブランチがチェックアウトされた後にフックを起動する方法はありますか?
答えて
これらのフックの1つは、それを行うことはありません場合、私はたぶんこの1
http://schacon.github.com/git/githooks.html
驚かれることと思います:
ポストチェックアウト
このフックはときに呼び出されますa がワークツリーを更新した後にgit-checkoutが実行されます。 チェックアウト分岐チェックアウト したかどうかを示す前頭部のREF(または変更されていなくてもよい)、新しいHEAD のREF、 フラグ(変更分岐:フックが3つのパラメータを が与えられます、フラグ= 1)またはファイル チェックアウト(ファイル からの検索、フラグ= 0)。このフックでは はgit-checkoutの結果に影響しません。
gitのフックがリポジトリの特別な場所に配置されたスクリプトで、その場所は次のとおりです。
.git /フックが
スクリプトは、あらゆる種類のできることをすることができますあなたの環境、つまりbash、python、rubyなどで実行してください。
チェックアウト後に実行されるフックはpost-checkoutです。ドキュメントから:
...フックは、以下の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つのパラメータをキャプチャし、人間にやさしい形式で出力します。
post-checkout
hookは三つのパラメータ受け取る:前の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から新しいブランチを作成するではなく、が検出されません。
他と同様ですが、ブランチが一度チェックアウトされたことを確認します。
#!/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
これは正しい道のりで私を得ました、ありがとう! チェックアウトをカウントするためにgrep reflogを使用しているので、ブランチが以前存在していて、同じ名前の新しいブランチが作成された場合、そのブランチが新しいものとして認識されないことになります。それは、使用の場合に応じて、望ましい動作または問題になる可能性がありますが、私はそれに言及していただけです。 – Pwnrar
- 1. gitで最後にn番目にチェックアウトされたブランチをチェックアウトする方法は?
- 2. チェックアウトされていないブランチに非早送りgitマージを行う方法はありますか?
- 3. gitで最後にチェックアウトされたブランチを見つける方法
- 4. ポスト受信フックのGitチェックアウト: "gitリポジトリではありません。" "
- 5. gitリセットで実行されるgitフックはありますか?
- 6. コミット後にコミット後のスクリプト(フック)が起動しないGit
- 7. Gitフック:ブランチがマージされるとJIRAステータスが更新されます
- 8. Git - ブランチをチェックアウトした後にコミットを回復する
- 9. gitは最後にチェックアウトしたブランチをどこに保存しますか?
- 10. このブランチはどのgitブランチからチェックアウトされましたか?
- 11. gitブランチをチェックアウトした後、リモートFTPの変更はブランチまたはマスターにのみ影響しますか?
- 12. Pygithubで新しいブランチをチェックアウトする方法は?
- 13. 新しくクローンされたgitリポジトリで、私は新しいブランチにチェックアウトできません
- 14. gitサブモジュールでコミット後のgitフックを起動できません
- 15. 削除されたローカルgitブランチをチェックアウトできるのはなぜですか?
- 16. Gitのフック:Gitのフックでエコーを有効にする方法がある
- 17. 特定のブランチから新しいブランチを作成しないようにするためのGitフック
- 18. gitが新しいブランチを作成した後にリモートに移動しない
- 19. gitでブランチを切り替えるたびにnpmを自動的に再起動する方法は?
- 20. 特定のgitリビジョンをチェックアウトするためにブランチを作成する必要がありますか?
- 21. ハードリセット後にGitブランチはどこにありますか?
- 22. Git masterブランチが自動的に更新されます
- 23. ウェブアプリケーションがスプリングブートアプリケーションで起動した後、自動的に 'dispatcherServlet'を初期化する方法はありますか?
- 24. ブランチが別のブランチにマージされたかどうかを確認する方法はありますか?
- 25. gitが他のブランチをリモート/起点にプッシュする方法は?
- 26. gitブランチを新しいマスターにする方法は?
- 27. ローカルでコミットされたブランチをgitでリカバリする方法は?
- 28. Git - マージされたブランチで新しいコミット - これらの新しいコミットをマージする方法?
- 29. ! [リモートで拒否されました] master - > master(ブランチは現在チェックアウトされています)gitのエラー
- 30. bigqueryテーブルが更新されたときに通知を受ける方法やフックはありますか?
これはブランチ作成チェックアウト(新しいHEADのreflogを見ている以外)であるかどうかを知る方法はありますか? – pkoch
まったく新しい質問をするのはいい考えです。あなたがそうするなら、私にリンクを送ってください。私が助けることができるかどうかがわかります。あなたが解決しようとしている問題は何ですか? – givanse
コミットがいくつかのブランチの先頭である場合、 'name-rev'はアルファベット順の名前だけを与えます。従って、元のブランチの名前の前にアルファベット順の名前を持つブランチをチェックアウトした後、 'prev HEAD'行はNEWブランチの名前を与えます。回避策: 'thisBranchName = $(git rev-parse --abbrev-ref HEAD);$(git branch --color = never - $ 1 | sed -e '/^..//'を含む)のブランチ用。 ["$(git show-ref -s $ branch)" == $ 1] && ["$ branch"!= "$ thisBranchName"]; を実行します。次に parentBranchName = $ branch; 休憩。 fi; ; done' – Ansa211