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

使用Git远程维护多个可同时访问的网站版本,git,Git,我想设置Git,这样我就可以同时访问同一网站的各种版本。例如,“沙箱”站点、“暂存”站点和“生产”站点 我目前在Windows上安装了Git 1.7.11,在CentOs 5.5 VPS上运行Git。在本地,我有两个分支,“master”和“dev”。远程我有两个分支,“master”和“dev” 我遵循了下面的教程,但现在我觉得自己相当愚蠢。我可以将文件从本地机器提交到远程机器的dev分支或master分支,并使用更新后挂钩将这些文件签出到我的Apache“htdocs”目录中。这非常有效,当

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

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

我遵循了下面的教程,但现在我觉得自己相当愚蠢。我可以将文件从本地机器提交到远程机器的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\u DIR

见:

  • “”
  • “”

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

更新后挂钩中的签出将起作用,但您可能还需要定义
git\u DIR

见:

  • “”
  • “”

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

这可能无助于你提出关于git的问题,但我不希望在web开发中使用这种工作流,因为在我看来,有一种方法需要做更多的工作,但在交换中要灵活和可靠得多

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

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


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

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

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

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


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

您尝试过吗?这听起来似乎很合理,但我对这一点很陌生,不确定什么是最佳实践……对我来说似乎是一个非常合理的想法。您已将服务器存储库设置为裸机,对吗?(否则,如果您正在更新服务器上签出的分支,git推送可能会失败。)您尝试过吗?这听起来似乎很合理,但我对这一点很陌生,不确定什么是最佳实践……对我来说似乎是一个非常合理的想法。您已将服务器存储库设置为裸机,对吗?(否则,如果要更新在服务器上签出的分支,git推送可能会失败。)