git - 我怎样才能将我的三个网站变体(及其部署目录)作为一个存储库中的分支而不是三个不同的分支?

标签 git deployment workflow branch

我正在使用 Git 部署一个网站,该网站在两台不同的服务器上具有三个不同的域,每个域代表不同的开发阶段:开发、暂存和生产

我已成功设置部署,使用每个 Web 根目录作为远程存储库,并使用接收后 Hook 在推送时更新自身。

但这有一些问题。首先,当另一个开发人员进行更改时,我想知道我只需要从一个存储库中 pull 。我不想问他他 promise 了 3 个中的哪一个。其次,最好利用一些分支,这样不仅网站的每个阶段都有自己的 repo 协议(protocol),而且也有自己的分支,所以在本地,我的每个分支“dev”, “staging”和“live”会推送到正确的 repo。

那是我的梦想。任何人都可以想出一种方法来完成这个工作流程吗?我失败得很惨。

最佳答案

你可以这样做。在此工作流程中,我假设有一个中央服务器 (origin>)、您的计算机 (local>) 和一些开发者 (deva>、devb>)。

首先让我们为您的开发、暂存和实时分支创建一些本地跟踪分支,并将它们推送到中央仓库。这只需要一次,所以开销不大。

local>git checkout -b dev
local>git push -u origin dev
local>git checkout -b staging
local>git push -u origin staging
local>git checkout -b live
local>git push -u origin live

好的。

现在您有三个分支,它们被设置为本地跟踪分支到源上相应的远程分支。现在任何开发人员都可以做同样的事情,但他们需要做的工作更少。首先,他们需要获取更新的引用,以便我们可以引用远程分支,然后使用 git checkout 命令创建跟踪分支。这需要由将要为中央存储库做出贡献的所有开发人员完成(即使在这种情况下也只需要一次)。

devx>git fetch
devx>git checkout --track origin/dev
devx>git checkout --track origin/staging
devx>git checkout --track origin/live

假设 deva 完成了一些您想看一看的工作。我们假设他/她正在 dev 分支上开发一项新功能。

deva>git checkout dev
deva> ... edit some files
deva>git commit -am "new feature bla bla"
deva>git push

你收到一封来自 deva 的邮件,说他已经推送了他的更改。然后你做:

local>git checkout dev
local>git pull

好的。所以现在您和其他开发人员已经启动并运行了一个系统,因此您可以在开发的任何阶段进行协作。但是我们如何在服务器环境中启动并运行更改?

我们可以利用git中的钩子(Hook)系统来解决这个问题。您可以让中央存储库通知每个服务器环境已将某些内容推送给它(您可以轻松地准确检测到推送的是哪个分支)并采取相应的措施。这样服务器就可以自行更新,而无需您关心。好吧,当然你需要小心你 push 和不 push 的东西。但无论您拥有何种系统,该要求将始终存在。

希望这能帮助你实现你的梦想:D

关于git - 我怎样才能将我的三个网站变体(及其部署目录)作为一个存储库中的分支而不是三个不同的分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973992/

相关文章:

git - 如何为目录和目录外的文件创建 git 存储库?

deployment - 构建时出现 gatsby-source-contentful 选项错误

java - 如何以编程方式检查 AppEngine 应用程序版本是否已存在

grails - Grails 3 WAR部署服务器先决条件

java - 我可以使用哪个 Java 工作流框架将其与 gui 绑定(bind)

button - 如何从 ui 操作触发 ServiceNow 工作流程?

多个大型开发分支的 Git 与 Subversion

Git 克隆到当前目录

git cherry-pick 说存在本地更改,但 git status 什么也没说

xcode - 在 Xcode 安装的 git 中禁用 osxkeychain 凭证助手