我有一个服务器,其中我的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,并学习如何做子弹2.
我搜索了文档,但我无法理解它。
感谢
答案 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的有趣信息,如果你仍然坚持认为它适合你。