Heroku有一个忽略所有分支的政策,除了“master”。

虽然我确信Heroku的设计者有很好的理由采用这种策略(我猜是为了存储和性能优化),但对我来说,作为一名开发人员,无论我在做什么本地主题分支,我都希望有一种简单的方法将Heroku的master切换到本地主题分支,并执行“git push Heroku -f”来覆盖Heroku上的master。

我从http://progit.org/book/ch9-5.html的“推Refspecs”部分得到的是

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

我真正想要的是在配置文件中设置这个的方法,这样“git push heroku”总是做上面的事情,用我当前分支的名称替换local-topic-branch。如果有人知道如何做到这一点,请告诉我!

当然,要注意的是,只有当我是唯一一个可以推送到Heroku应用程序/存储库的人时,这才有意义。测试或QA团队可能管理这样的存储库来尝试不同的候选分支,但是他们必须进行协调,以便他们都同意在任何给定的一天将哪个分支推到该分支。

不用说,拥有一个独立的远程存储库(如GitHub)也是一个非常好的主意,没有这个限制来备份所有内容。我将其称为“origin”,并使用“heroku”来表示heroku,这样“git push”总是会将所有内容备份到origin,而“git push heroku”则会将我当前在heroku的主分支上的任何分支推送到heroku的主分支,如果必要的话会覆盖它。

这样能行吗?

[remote "heroku"]
    url = git@heroku.com:my-app.git
    push = +refs/heads/*:refs/heads/master

在我开始试验之前,我想听听更有经验的人的意见,尽管我想我可以在Heroku上创建一个虚拟应用程序并进行试验。

至于抓取,我并不关心Heroku存储库是否只写。我仍然有一个单独的存储库,如GitHub,用于备份和克隆我所有的工作。

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


当前回答

在2022年的某个时候,语法“git push heroku otherbranchname:master”不再对我有效。它总是返回“所有最新的”。在查阅Heroku文档后,我发现“master”已经被改为“main”,所以语法现在是这样的:

我叫英雄

其他回答

我发现这很有帮助。 http://jqr.github.com/2009/04/25/deploying-multiple-environments-on-heroku.html

你应该看看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

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

还要注意,如果你使用git流系统,你的特性分支可能会被调用

feature/mobile_additions

而使用名为stagingtwo的git远程,则push到heroku的命令将是

git push stagingtwo feature/mobile_additions:master

我觉得应该是

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

而不是……

Heroku labs现在提供了一个github插件,可以让你指定要推送哪个分支。

请看Heroku关于这个测试版特性的文章。

你需要暂时注册成为beta测试者。