我正在使用 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/