不同的分支挂钩

时间:2013-10-30 16:49:32

标签: git

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

#!/bin/bash
cd /home/git/sureshots.git
GIT_WORK_TREE=/home/andrepadez/production/sureshots git checkout -f
echo 'branch master deployed to live'

我只想在推送到分支时发生checkout -f     主。

  1. 当我推送到另一个分支时,我的work_tree没有更新,但我仍然看到了回声 '分支大师部署为生活'。
  2. 我想为分支发布设置不同的设置。
  3. 我希望了解子弹1,并学习如何做子弹2.
    我搜索了文档,但我无法理解它。 感谢

1 个答案:

答案 0 :(得分:1)

您需要从stdin读取更新的refs,然后在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命令只是检查当前HEAD应该是什么(它是master)。如果您需要它来部署不同的分支,那么您需要调整后接收脚本。

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

gitolite docs有一些关于使用git as a deployment tool的有趣信息,如果你仍然坚持认为它适合你。