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

时间:2010-06-04 04:38:00

标签: git github heroku push git-push

Heroku的政策是忽略所有分支但是“主人”。

虽然我确信Heroku的设计师有很好的理由来制定这个政策(我猜测存储和性能优化),但作为开发人员,我的后果是无论我在做什么本地主题分支,我都希望一个简单的方法将Heroku的主人切换到本地主题分支,然后在Heroku上执行“git push heroku -f”覆盖主人。

我从阅读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的主分支,覆盖它如果有必要的话。

这会有用吗?

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

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

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

脚注:此问题与 Good Git deployment using branches strategy with Heroku?

类似但不完全相同

11 个答案:

答案 0 :(得分:1452)

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

$ git push heroku yourbranch:master

答案 1 :(得分:119)

使用通配符时,它必须出现在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

答案 2 :(得分:44)

git push -f heroku local_branch_name:master

答案 3 :(得分:5)

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

feature/mobile_additions

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

git push stagingtwo feature/mobile_additions:master

答案 4 :(得分:5)

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

git push -f heroku branch_name:master

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

答案 5 :(得分: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

当然,如果你经常做某事,你可以做更简单的佣金任务。

答案 6 :(得分:3)

对我来说,它有效

git push -f heroku otherBranch:master
  

建议使用-f(强制标志),以避免与其他开发人员的推送冲突。由于不是将Git用于版本控制,而只是将其用作传输,因此使用force标志是一种合理的做法。

源:-offical docs

答案 7 :(得分:2)

答案 8 :(得分:1)

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

See Heroku's write up on this beta feature.

您需要立即注册成为测试人员。

答案 9 :(得分:1)

git push heroku $(git branch --show-current):master

答案 10 :(得分:0)

我认为应该是

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

,而不是...