我使用以下接收后挂钩:
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 checkout -- *
在 git dir 的顶部执行更多的命令 - 现在这个命令做我想要的:git status
现在不再显示任何差异。
为什么这个命令git checkout -- "$GIT_TOP/*"
在钩子中不起作用,只能通过直接调用起作用?如何在钩子中运行此命令?
附言
我发现git rev-parse --show-toplevel
从钩子中调用返回<myrepo>/.git
路径,但从 shell 中它的值只是<myrepo>
. 可能这可以帮助解决问题。