【问题标题】:Maintain multiple simultaneously-accessible versions of website remotely using Git使用 Git 远程维护多个可同时访问的网站版本
【发布时间】:2012-10-04 17:48:09
【问题描述】:

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

我目前在 Windows 上安装了 Git 1.7.11,并且 Git 在我的 CentOs 5.5 VPS 上运行。在本地,我有 2 个分支,“master”和“dev”。远程我有 2 个分支,“master”和“dev”。

我遵循了以下教程showing how to manage a website using 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 push 可能会失败。)

标签: git


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    更新后挂钩中的结帐将起作用,但您可能还想定义 GIT_DIR

    见:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多