【问题标题】:merging in git post-receive hook合并 git post-receive hook
【发布时间】:2012-07-07 14:40:22
【问题描述】:

我使用以下 post-receive 钩子:

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 目录的顶部执行更多的 git checkout -- * - 现在这个命令做我想要的:git status 现在不再显示任何差异。

为什么这个命令git checkout -- "$GIT_TOP/*" 在钩子中不起作用,只能通过直接调用起作用?如何在钩子中运行这个命令?

附言

我发现从钩子中调用的git rev-parse --show-toplevel 返回<myrepo>/.git 路径,但从shell 中它的值只是<myrepo>。也许这可以帮助解决问题。

【问题讨论】:

    标签: git githooks


    【解决方案1】:

    好的,现在可以使用了。多思考少复制。

    export GIT_WORK_TREE=`pwd`
    export GIT_DIR=`pwd`/.git
    

    保罗

    【讨论】:

      【解决方案2】:

      export GIT_WORK_TREE=$GIT_DIR/. 解决了我的问题。现在甚至 git checkout -- "$GIT_TOP/*" 也不需要了。因为git merge $refname 工作正常 - 在正确的目录上。

      【讨论】:

      • 您介意更新问题以包含最终版本吗? :) 或者这个答案,然后将其标记为解决方案?
      【解决方案3】:

      谢谢。

      我试过了:

      export GIT_WORK_TREE=$GIT_DIR/.
      while read oldrev newrev refname
      do
              echo "=== merging $refname"
              git merge $refname
      done
      

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

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

      也许需要那个结帐大师?

      我可以手动进行合并。

      保罗

      【讨论】:

        猜你喜欢
        • 2015-03-22
        • 2014-06-02
        • 2013-07-17
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-11
        相关资源
        最近更新 更多