合并在git post-receive hook中

时间:2012-07-07 14:40:23

标签: git githooks

我使用以下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>。可能这有助于解决问题。

3 个答案:

答案 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

找回错误:“您对以下文件的本地更改将被合并覆盖” ..提到刚推的文件。

这表明它没有尝试将刚刚收到的更改合并到主分支

也许需要结账大师?

我能够手动进行合并。