最近,我们开始探索GIT,目标是让我们的开发人员可以在任何地方工作,其次是自动化整个部署过程。
我们有一个中央测试服务器,我们托管所有应用程序/站点以进行测试和/或演示,一旦开发和测试完成,我们将应用程序移动到各自的实时服务器。
无论我使用GIT设置了什么,如下所示
1.在测试服务器上创建一个裸仓库
2.为每个涉及的开发人员获取本地克隆,开发人员将推送到远程(测试服务器)dev分支
3.有人会合并从dev分支到master分支的所有更改并将其推送到远程
4.测试服务器(裸仓库)有一个post-receive钩子,它将master分支检出到public_html文件夹(使用GIT_WORKING_DIR和checkout -f)。
截至目前,一切运行良好,我能够在托管页面上的主分支上看到合并(当然,在测试服务器上)。现在我的问题是...
我这样做对吗?
2.我想我已经设置了post-receive hook,也可以在push to dev分支上执行。怎么避免这个?
3.我如何将这些内容发送到我的实时服务器?由于我有一些具有大量代码库的项目,检查测试服务器上的所有内容然后将其发送到现场看起来不够好。
我听说过CI服务器,但据我所知,他们在本地检查并使用'rsync'上传所有内容(不知道是否只是同步更改或上传所有内容) )或此类工具。我只是想避免所有部分并保持选项打开以进行回滚,如果出现任何问题。我很擅长在实时服务器上设置git。
答案 0 :(得分:7)
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
另请参阅“Writing a git post-receive hook to deal with a specific branch”关于部署,如“Deploy with rsync(or svn, git, cvs) and ignore inconsistent state during deployment?”所示,在单独的目录中部署(甚至所有内容)并将prod实例符号链接到该目录是避免部署期间不一致的好方法,以及在出现问题时便于回滚(符号链接回到上一个实时目录)。