Git 不同的树枝用不同的钩子钩住
我有一个服务器,其中我的git存储库是用--bare参数启动的。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 大师 当我推到另一个分支时,我的工作树没有更新,
在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
大师
我翻遍了文件,但弄不懂。
谢谢您需要从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我更新了我的答案,因为它太长,无法放入注释块中。:-)