使用Git远程维护多个同时可访问的网站版本



我想设置Git,这样我就可以同时访问同一网站的不同版本。例如,"沙盒"站点、"暂存"站点和"生产"站点。

我目前在Windows上安装了Git 1.7.11,Git在我的CentOs 5.5 VPS上运行。在本地,我有两个分支,"master"one_answers"dev"。在远程,我有两个分支,"master"one_answers"dev"。

我遵循了下面的教程,展示了如何使用Git管理网站,但现在我觉得自己很愚蠢。我可以将文件从本地机器提交到远程机器的dev分支或master分支,并使用更新后挂钩将这些文件签出到我的Apache"htdocs"目录中。这非常有效,当我切换分支时,文件会"更改"。

但是,我希望同时访问这两个版本,这样我就可以运行一个站点,而客户端可以查看同一站点的暂存版本我该怎么做之后我计划使用Git将staging/dev合并到master中。

这是最好的方法吗?在更新后挂钩中结账?

GIT_WORK_TREE=/htdocs/production git checkout master -f
GIT_WORK_TREE=/htdocs/staging git checkout dev -f

这可能对你关于Git的问题没有帮助,但我不喜欢在web开发中使用这种工作流,因为在我看来,有一种方法需要更多的工作,但作为交换,它要灵活可靠得多。

我只想标记一个裸露的公共存储库,在那里所有的提交都通过推送和获取(就像你正在使用的有钩子的),但没有任何钩子。然后,我会在远程服务器上有两个项目目录:一个用于dev,一个用于master;两者都使用克隆的非裸git存储库(每个存储库都有一个.git文件夹)。因此,您的web服务器上有1个裸存储库(也可以在任何服务器上)和2个非裸存储库。

在这种情况下,您可以在本地推送您想要的所有内容,只有当您决定推送时,web项目目录中的工作目录才会更改。这还有一个额外的好处,即在出现与项目环境相关的错误时,可以直接在远程服务器的项目目录上进行快速更改,您可以提交修复程序并轻松将其推回。

使用多个远程项目目录(和url),您可以在同一服务器上同时拥有多个项目状态。

更新后挂钩中的签出可以工作,但您可能还需要定义GIT_DIR

参见:

  • "使用git将node.js应用程序部署到生产服务器">
  • 接收后挂钩中的Git签出:"不是Git存储库'.'">

这将确保git命令知道git repo在哪里。

最新更新