Git代理可以推送到多个远程仓库

6
我正在寻找一款软件,希望有人已经开发了这样的软件。在这里我会描述这款软件,希望有人听说过类似的东西,并能指导我正确的方向。
我正在开发一个部署在Heroku上的web应用程序。由于Heroku的限制,我不得不为同一个代码库维护四(4)个远程Git仓库,这是非常不幸的情况。
为什么需要四个远程Git仓库呢?
我们在Heroku上有多个“应用程序”。其中一个是生产环境,还有几个是staging环境。“应用程序”都是属于同一个实际应用程序的,但在Heroku上它们是分开的,这样我们就可以在推送到生产环境之前在staging环境上试验。
每个在Heroku上的应用程序都有自己的Git仓库,并且每次将新提交推送到master分支时,它都会自动部署。这是我们问题的关键所在。因为这意味着我们在Heroku上有3个不同的仓库,以及我们的GitHub仓库。
为什么有4个不同的Git远程仓库是个问题?因为这意味着当你开发并创建新的提交时,你必须(1)只推送到一个远程仓库或(2)推送到所有远程仓库。
方式(1)意味着你要考虑一下你想要推送到哪个远程仓库。我不喜欢想这个问题。当我开发时,我不关心远程仓库,我提交并推送然后继续工作。如果我想将一个分支部署到staging server 1中,例如,我会将该分支合并到staging_1分支中并推送它。我不喜欢选择要推送到哪个远程仓库。
(1)的另一个缺点是你的远程仓库会失去同步。
我想要的是(2)。我希望每次推送操作都会推送到我们的四个仓库。
但这样做有两个问题:
问题1:Heroku上的staging环境部署的是master分支。我不想让它们这样做。我想将我的repo中的staging_1分支映射到staging server Git repo上的master分支。
问题2:让我的电脑推送到所有4个仓库需要很长时间。即使是一个Heroku推送操作也需要很长时间。有时需要40秒。
建议解决方案
这是我想要的。我想要一个专门的Git服务器作为代理。每当我从我的本地计算机推送到此Git服务器时,它将在后台并行地将这些相同的分支推送到我们的4个Git仓库中。这样,从我的本地计算机的角度来看,推送似乎是瞬间完成的,而该代理服务器将自动处理Heroku仓库。
如果由于任何原因,向4个远程服务器之一推送失败,我希望这个代理能以某种方式报告回来,这样我就知道出了问题并可以修复它。
另外,这个代理还需要进行主映射。每次我将staging_1分支推送到它时,它将把它作为staging_1推送到所有远程服务器,但对于属于暂存服务器的远程服务器,它还将该分支作为master推送,这样Heroku就会知道要部署它。
(很遗憾,Heroku的设计使我需要这样一个代理,但这就是我必须处理的问题。)
所以这就是我想要的解决方案。有人知道这样的程序吗?

问题1可以通过以下方式解决:git push staging staging_1:master - 即将本地的staging_1分支推送到远程的staging主分支。 - John Beynon
你可能会发现 https://github.com/fastestforward/heroku_san 可以帮助你编写一个部署脚本,但是仍然需要在4个仓库中进行缓慢的部署。 - John Beynon
2个回答

1
创建一个新的代码仓库,当您想要进行推送时可以将其推送到该仓库,并编写一个 post-receive 钩子以在您推送到此仓库时传播更改。

0

这对我来说有点疯狂。我在Heroku上有多个运行不同环境的应用程序。我有一个Github仓库,然后是针对不同环境的Heroku远程。我还倾向于维护与其中一个Heroku远程匹配的Git分支。

部署(如John所说)是通过以下方式完成的:

git push heroku_remote local_branch:master

我已经在这里记录了这种基本方法:

http://neilmiddleton.com/deploying-topic-branches-to-heroku/

然而,从我所了解的情况来看,您需要完全自动化。您可以使用TDDium等服务来为您执行此类操作,监视Git分支,然后在测试套件通过时将其推送到远程分支(例如Heroku远程)。

http://neilmiddleton.com/continuous-deployment-with-heroku/

我相信TDDium方法将为您提供所需的内容,并带有额外的CI层。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接