【问题标题】:Heroku: How to push different local Git branches to Heroku/masterHeroku:如何将不同的本地 Git 分支推送到 Heroku/master
【发布时间】:2011-02-27 15:08:33
【问题描述】:

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,用于备份和克隆我的所有工作。

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

相似,但又不完全相同

【问题讨论】:

标签: git github heroku push git-push


【解决方案1】:
【解决方案2】:

我觉得应该是的

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

相反...

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这两个命令有什么区别还是我们必须同时执行这两个命令
    • @SaadMasood:那些最后到git push 的命令做同样的事情。请参阅git push --help 以了解参考规范中-f 选项和+ 的含义。
    • @Chris Johnson:你能告诉我们 -f 参数是什么意思,而不是 RTFMing 这里的人吗?
    • @AHH -f 代表强制jassa’s answer 对我有用。
    • @Cameron Wilby HEAD 只是指您的 for 分支中的最后一次提交(分支的负责人),并且由于 git 的工作方式,它将包括之前的每个提交。
    【解决方案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 任务。

    【讨论】:

      【解决方案5】:
      git push -f heroku local_branch_name:master
      

      【讨论】:

      • 当心,这里使用-f--force,当你强制推送时,最好确保你知道自己在做什么。
      • @tomasz-mazur 为什么需要 -f?
      • 是的,在某些情况下,我们可能需要使用 -f,例如处理多个进行中的分支并替换 heroku 中的任何内容并测试工作分支,请告知我们是否有其他更好的方法测试
      • 它可以在我的电脑上运行,谢谢你的回答,这个语法实际上在普通的 Github 存储库中有效吗?
      【解决方案6】:

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

      $ git push heroku yourbranch:master
      

      【讨论】:

      • 可能需要 -f 力。
      • @DaveMeehan 这仍然有效。您正在尝试执行git push :master,它通过不覆盖任何内容来删除主分支。这与用另一个分支覆盖它不同。 Heroku 可能有适当的保护措施来防止删除 master 分支。
      • 这是一个很棒的解决方案
      • @nxmohamad 除非你的分支在 master 分支后面并且你想覆盖 Heroku 上的当前代码,否则它不会。
      • 看起来我们需要强制推送 git push -f heroku yourbranch:master @jassa
      【解决方案7】:

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

      feature/mobile_additions
      

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

      git push stagingtwo feature/mobile_additions:master
      

      【讨论】:

        【解决方案8】:

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

        See Heroku's write up on this beta feature.

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

        【讨论】:

          【解决方案9】:

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

          git push -f heroku branch_name:master
          

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

          【讨论】:

          • 您不认为最好先不使用 -f 吗?然后如果有冲突,首先确认可以覆盖它们
          • 不要盲目地使用-f
          【解决方案10】:

          对我来说,它有效,

          git push -f heroku otherBranch:master
          

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

          来源:-offical docs

          【讨论】:

            【解决方案11】:
            git push heroku $(git branch --show-current):master
            

            【讨论】:

              猜你喜欢
              • 2014-11-08
              • 2017-04-16
              • 1970-01-01
              • 2014-04-01
              • 2013-08-18
              • 1970-01-01
              • 2018-12-03
              • 2016-01-23
              • 1970-01-01
              相关资源
              最近更新 更多