447

Heroku 的策略是忽略除“master”之外的所有分支。

虽然我确信 Heroku 的设计者有充分的理由支持这项政策(我猜是为了存储和性能优化),但作为开发人员的结果是,无论我在处理什么本地主题分支,我都想要一个简单的方法将 Heroku 的 master 切换到该本地主题分支并执行“git push heroku -f”以覆盖 Heroku 上的 master。

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

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

我真正想要的是一种在配置文件中进行设置的方法,以便“git push heroku”始终执行上述操作,将local-topic-branch替换为我当前分支的名称。如果有人知道如何做到这一点,请告诉我!

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

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

这行得通吗?

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

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

至于获取,我真的不在乎 Heroku 存储库是否是只写的。我仍然有一个单独的存储库,例如 GitHub,用于备份和克隆我所有的工作。

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

4

11 回答 11

1647

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

$ git push heroku yourbranch:master
于 2012-06-21T17:35:44.463 回答
144

使用通配符时,它必须出现在 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
于 2010-06-05T10:54:46.513 回答
80
git push -f heroku local_branch_name:master
于 2011-11-14T15:00:08.020 回答
16

对我来说,它有效,

git push -f heroku otherBranch:master

建议使用 -f(强制标志)以避免与其他开发人员的推送冲突。由于您没有使用 Git 进行修订控制,而只是作为一种传输方式,因此使用 force 标志是一种合理的做法。

来源:-官方文档

于 2019-11-09T02:25:21.823 回答
12

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

git push -f heroku branch_name:master

注意:虽然您可以不使用 -f 进行推送,但建议使用 -f(强制标志)以避免与其他开发人员的推送冲突。

于 2016-11-24T06:50:06.863 回答
6

另请注意,如果您使用 git flow 系统并且您的功能分支可能会被调用

feature/mobile_additions

并使用名为 stagingtwo 的 git 远程,然后推送到 heroku 的命令将是

git push stagingtwo feature/mobile_additions:master
于 2014-01-22T04:57:06.487 回答
4

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

于 2010-12-21T04:24:35.843 回答
4
git push heroku $(git branch --show-current):master
于 2020-06-19T01:00:03.137 回答
2

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

于 2010-06-04T17:27:34.367 回答
1

Heroku 实验室现在提供了一个 github 插件,让您可以指定要推送的分支。

请参阅 Heroku 关于此 beta 功能的文章。

您暂时需要注册成为 Beta 测试人员。

于 2014-12-02T02:01:07.240 回答
0

我认为应该是

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

反而...

于 2010-06-05T10:05:18.153 回答