次の受信後フックを使用します。
GIT_TOP=`git rev-parse --show-toplevel`
while read oldrev newrev refname
do
echo "=== $oldrev"
echo "=== $newrev"
echo "=== $refname"
echo "=== 01. checkout -- $GIT_TOP/*"
git checkout -- "$GIT_TOP/*"
echo "=== 02. merging $refname"
git merge $refname
echo "=== 03. checkout -- $GIT_TOP/*"
git checkout -- "$GIT_TOP/*"
done
アイデアは十分に明確です。現在のブランチをプッシュされたブランチとマージする必要があります。
次に、実行します。
git status
ローカルツリーがブランチとは異なることがわかります。git dirの先頭でもう1つ実行するよりも
git checkout -- *
、このコマンドは私が望むことを実行しgit status
ます。違いはもう表示されません。
このコマンドgit checkout -- "$GIT_TOP/*"
がフックで機能せず、直接呼び出しでのみ機能するのはなぜですか?このコマンドをフックで実行するにはどうすればよいですか?
PS
git rev-parse --show-toplevel
フック内から呼び出されると<myrepo>/.git
パスが返されることがわかりましたが、シェルからの値はちょうど<myrepo>
です。これは問題の解決に役立つ可能性があります。