Heroku有一个忽略所有分支但'master'的政策。
虽然我相信Heroku的设计师对于这个政策有着很好的理由(我猜测是为了存储和性能优化),作为开发者,对我来说,结果就是无论我在本地工作的是哪个主题分支,我都希望有一种简单的方式可以切换Heroku的主分支到本地的主题分支,并执行"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),没有这个限制,可以备份所有内容。我会把它称为"origin",并使用"heroku"来表示Heroku,这样"git push"总是将所有内容备份到origin,而"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?类似,但并不完全相同。