Git 不同的树枝用不同的钩子钩住

Git 不同的树枝用不同的钩子钩住,git,Git,我有一个服务器,其中我的git存储库是用--bare参数启动的。 在hooks目录中,我有一个post-receive钩子: #!/bin/bash cd /home/git/sureshots.git GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f echo 'branch master deployed to live' 我只希望在推到分支时发生签出-f 大师 当我推到另一个分支时,我的工作树没有更新,

我有一个服务器,其中我的git存储库是用--bare参数启动的。
在hooks目录中,我有一个post-receive钩子:

#!/bin/bash
cd /home/git/sureshots.git
GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f
echo 'branch master deployed to live'
我只希望在推到分支时发生
签出-f
大师

  • 当我推到另一个分支时,我的工作树没有更新,但我仍然可以看到 “分支主机已部署为活动”
  • 我想为分支发布使用不同的设置
  • 我希望了解项目符号1,并学习如何执行项目符号2。
    我翻遍了文件,但弄不懂。
    谢谢

    您需要从stdin中读取更新的引用,然后在更新master时触发挂钩。比如:

    while read oldrev newrev ref ; do
        if [ "$ref" == "refs/heads/master" ]; then
            GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f
            echo 'branch master deployed to live'
        fi
    done
    
    更新:

    对不起,我没注意到有问题。
    post receive
    脚本总是在任何推送操作上运行,但是您的checkout命令只是签出当前头应该是什么(主头)。如果需要它来部署不同的分支,那么需要调整post-receive脚本

    这里有几件事要记住。Git是一个版本控制工具,而不是一个部署工具。所以,虽然你可以做这件事,但这通常是不可取的。通过使用部署分支,强制将更改推送到它(如果需要),并让脚本签出部署分支,可以使这项工作做得更好一些。这样您就不会损坏主机,但仍然可以控制部署的内容


    gitolite文档提供了一些关于使用的有趣信息,如果您仍然相信它适合您的话。

    很酷,谢谢。这是很好的第一步。但为什么当我推到另一个分支时脚本运行,但生产目录没有得到更改?@AndréAlçadaPadez我更新了我的答案,因为它太长,无法放入注释块中。:-)