如何将不同的本地Git分支推送到Heroku / master

Heroku有一个忽略所有分支而不是“主”的策略。

虽然我确信Heroku的devise人员对这个策略有很好的理由(我为存储和性能优化而猜测),但是作为一名开发人员,我的后果是无论我可能在做什么本地主题分支,我想要一个简单的方法将Heroku的主人切换到当地主题分支,并在Heroku上用“git push heroku -f”重写主人。

从阅读http://progit.org/book/ch9-5.html的“推送参考资料”部分得到的是

  git push -f heroku local-topic-branch:refs / heads / master 

我真的很喜欢的一种方法是在configuration文件中进行设置,以便“git push heroku”总能完成上述操作,用当前分支的名称replacelocal-topic-branch 。 如果有人知道如何做到这一点,请让我知道!

对此的警告当然是,如果我是唯一可以推送到Heroku应用程序/存储库的人,这是唯一明智的。 testing或QA团队可能会pipe理这样一个存储库来尝试不同的候选分支,但他们必须进行协调,以便他们都能够同意他们在任何一天推送到哪个分支。

不用说,拥有一个独立的远程仓库(比如GitHub)也是一个非常好的主意,没有这个限制来支持所有的事情。 我会叫那个“起源”,用Heroku来“Herku”,这样“git push”总是支持起源,“git push heroku”把我现在的任何分支推向Heroku的主分支,覆盖它如有必要。

这会工作吗?

 [遥远的“英雄”]
     url = git@heroku.com:my-app.git
     push = + refs / heads / *:refs / heads / master

在开始实验之前,我想听听更有经验的人,尽pipe我想我可以在Heroku上创build一个虚拟应用程序并对其进行实验。

至于抓取,我并不在乎Heroku资料库是否只写。 我还有一个独立的存储库,比如GitHub,用于备份和克隆我所有的工作。

脚注:这个问题与使用Heroku的分支策略的Good Git部署相似,但不完全相同

当使用通配符时,它必须出现在refspec的两侧,所以+refs/heads/*:refs/heads/master将不起作用。 但是你可以使用+HEAD:refs/heads/master

 git config remote.heroku.push +HEAD:refs/heads/master 

另外,你可以直接用git push来做到这一点:

 git push heroku +HEAD:master git push -f heroku HEAD:master 

请参阅https://devcenter.heroku.com/articles/git#deploying-code

 $ git push heroku yourbranch:master 
 git push -f local_branch_name:master 

你应该检查出heroku_san ,它很好地解决了这个问题。

例如,您可以:

 git checkout BRANCH rake qa deploy 

它还可以轻松启动新的Heroku实例,将主题分支部署到新服务器:

 git checkout BRANCH # edit config/heroku.yml with new app instance and shortname rake shortname heroku:create deploy # auto creates deploys and migrates 

当然,如果你经常做一些事情,你可以做更简单的耙子任务。

另外请注意,如果您使用gitstream程系统和您的function分支可能会被调用

 feature/mobile_additions 

并用一个名为stagingtwo的git remote,那么推送到heroku的命令将是

 git push stagingtwo feature/mobile_additions:master 

最安全的命令将不同的本地Git分支推送到Heroku / master。

 git push -f heroku branch_name:master 

注意:尽pipe您可以不使用-f,但推荐使用-f(强制标志),以避免与其他开发人员的冲突。

Heroku实验室现在提供了一个github插件,让你指定推送哪个分支。

看Heroku写这个testing版function。

您需要注册成为testing人员的时间。

我认为应该是

push = refs/heads/*:refs/heads/*

代替…