6

最近我们开始探索 GIT,目标是让我们的开发人员能够在任何地方工作,其次是自动化整个部署过程。

我们有一个中央测试服务器,我们托管所有应用程序/站点以进行测试和/或演示目的,一旦开发和测试完成,我们将应用程序移动到各自的实时服务器。

无论我用 GIT 设置什么,如下
1. 在测试服务器上创建一个裸仓库
2. 为每个涉及的开发人员获取一个本地克隆,开发人员将推送到远程(测试服务器)开发分支
3. 有人将合并所有更改dev 分支到 master 分支并将其推送到远程
4. 测试服务器(裸仓库)有一个 post-receive 挂钩,它将 master 分支签出到 public_html 文件夹(使用 GIT_WORKING_DIR 和 checkout -f)。

到目前为止,一切正常,我可以在托管页面上的主分支上看到合并(当然是在测试服务器上)。现在我的问题是……
1. 我这样做对吗?
2. 我猜我设置的 post-receive 钩子也会在推送到 dev 分支时执行。如何避免这种情况?
3. 如何将这些内容发送到我的实时服务器?由于我有一些具有大型代码库的项目,因此检查测试服务器上的所有内容然后将其发布到现场看起来还不够好。

我听说过 CI 服务器,但据我所知,他们在本地签出并使用“rsync”(不知道它是否只是同步更改或上传所有内容)或此类工具上传所有内容如果出现任何问题,我只是想避免一切都成为一部分,并保持一个选项可以回滚。我擅长在实时服务器上设置 git。

4

1 回答 1

7
  1. 是的。您可以在“ reset hard on git push ”中查看其他注意事项。
  2. 您可以在收到提交时测试分支的名称。
    branch=$(git rev-parse --symbolic --abbrev-ref $refname) 另请参阅“编写 git post-receive 挂钩来处理特定分支
  3. rsync 通常建议用于实时服务器(不需要 git):它只会更新已更改的内容。
    如果您在实时服务器上有 git,那么“用于网站的 Git/接收后/测试和生产站点的分离”中描述了各种方法

关于部署,如“使用 rsync(或 svn、git、cvs) 部署并在部署期间忽略不一致的状态? ”中所见,在单独的目录中部署(甚至所有内容)并将产品实例符号链接到该目录是避免部署期间的不一致,并在出现问题时促进回滚(符号链接回以前的活动目录)。

于 2012-11-04T10:18:09.127 回答