-1

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

#!/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. 我想为分支版本设置不同的设置。

我希望了解项目符号 1,并学习如何做项目符号 2。
我已经搜索了文档,但我无法理解它。谢谢

4

1 回答 1

1

您需要从标准输入读取更新的 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 应该是什么(这是主)。如果您需要它来部署不同的分支,那么您需要调整 post-receive 脚本。

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

gitolite 文档有一些关于使用git 作为部署工具的有趣信息,如果你仍然确信它适合你的话。

于 2013-10-30T17:18:56.710 回答