我使用以下post-receive hook:
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顶部执行更多git checkout -- *
- 现在这个命令按照我想要的方式执行:git status
现在不再显示差异了。
为什么这个命令git checkout -- "$GIT_TOP/*"
在钩子中不起作用,只能通过直接调用工作?如何在hook中运行此命令?
P.S。
我发现从钩子中调用的git rev-parse --show-toplevel
返回<myrepo>/.git
路径,但是从shell中它的值只是<myrepo>
。可能这有助于解决问题。
答案 0 :(得分:3)
好的,现在就搞定了。更多的思考,减少复制。
export GIT_WORK_TREE=`pwd`
export GIT_DIR=`pwd`/.git
保
答案 1 :(得分:2)
export GIT_WORK_TREE=$GIT_DIR/.
解决了我的问题。现在甚至git checkout -- "$GIT_TOP/*"
都不用了。因为git merge $refname
正常工作 - 在正确的目录上。
答案 2 :(得分:1)
为此而感谢。
我试过了:
export GIT_WORK_TREE=$GIT_DIR/.
while read oldrev newrev refname
do
echo "=== merging $refname"
git merge $refname
done
找回错误:“您对以下文件的本地更改将被合并覆盖” ..提到刚推的文件。
这表明它没有尝试将刚刚收到的更改合并到主分支
也许需要结账大师?
我能够手动进行合并。
保