Git在提交/推送部署分支到服务器

问题描述:

我正在一个网站上工作,并开始使用版本控制(Git),并有几个分支(现在是“主”和“开发”)。所以我经常致力于“开发”并将其推向Bitbucket。Git在提交/推送部署分支到服务器

我希望我们的开发Web服务器始终拥有最新版本的“开发”分支,而不是通过FTP手动上传。

我确实可以完全访问此Web服务器,Windows 2008 R2(但可能可以使用Linux,如果需要的话),因此可以安装任何我需要的东西。

有关如何做到这一点的任何想法?

我对Git相当陌生,所以请说出我想做什么只是疯狂。

您可以使用远程git存储库上的post-receive钩子来捕获对开发分支的提交,并使其部署(或任何你想要的)分支。

无论何时进行推送,post-receive挂钩都将在远程设备上运行。您基本上需要检测是否对开发分支进行了推送,如果是,则将开发分支签出到您的部署目录中。

我后收到看起来是这样的:设立时

DEPLOYDIR=/directory/you/want/to/deploy/to 
BRANCH=develop 
while read oldrev newrev ref; do 
    if [[ $ref =~ .*/$BRANCH$ ]]; then 
    echo "Ref $ref received. Deploying branch to $DEPLOYDIR" 
    cd $DEPLOYDIR 
    git fetch origin 
    git reset --hard origin/$BRANCH 
    fi 
done 

我发现这篇文章非常有用我的后得到:http://gitolite.com/deploy.html

+0

感谢您的答复,我想这可能帮助,但一个我不明白的是,它怎么知道这是一个接收后的钩子?我在上面的代码中看不到任何指定这个的东西? – FireLeopard 2014-10-20 10:49:38

+0

“post-receive”挂钩脚本只是在启动到远程服务器的推送时从git自动运行的自定义脚本的名称。这个特性是内置在git中的。下面是一个更好的描述它的链接:http://git-scm.com/book/en/Customizing-Git-Git-Hooks – 2014-10-20 14:32:58

+0

好的,也许我应该改述。 Git如何知道只为post-receive而不是脚本运行脚本,比如pre-commit或其他什么? 在Git文档中,我可以看到的是将文件放入钩子目录中的名称是否正确(无论这应该是什么意思)。 – FireLeopard 2014-10-20 14:41:45