1. ホーム
  2. git

[解決済み] Heroku: 異なるローカルGitブランチをHeroku/masterにプッシュする方法

2022-03-21 18:53:59

質問

Herokuは、「master」以外のブランチを無視するポリシーを持っています。

Heroku の設計者がこのポリシーに優れた理由を持っていることは確かですが (ストレージとパフォーマンスの最適化のためでしょう)、開発者としての私にとっては、自分が作業しているローカルトピックブランチが何であれ、Heroku の master をそのローカルトピックブランチに切り替えて "git push heroku -f" で Heroku の master を上書きできるような方法が簡単に欲しいということです。

の "Pushing Refspecs" セクションを読んで得たものは、以下の通りです。 http://progit.org/book/ch9-5.html

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

私が本当に欲しいのは、設定ファイルでこれを設定して、"git push heroku"が常に上記を実行するようにする方法です。 ローカルトピック-ブランチ を現在のブランチの名前に置き換えてください。 もしその方法を知っている人がいたら、ぜひ教えてください。

もちろん、この場合の注意点は、私がそのHerokuアプリ/リポジトリにプッシュできる唯一の人間である場合のみ、この方法が賢明であるということです。テストチームやQAチームは、異なる候補ブランチを試すためにそのようなリポジトリを管理するかもしれませんが、彼らは全員、ある日どのブランチをプッシュするかに同意するように調整しなければならないでしょう。

もちろん、この制限を受けないリモートリポジトリ(GitHubなど)を別途用意し、そこにすべてをバックアップしておくのも非常に良いアイデアです。そのリポジトリを "origin" と呼び、Heroku には "heroku" を使って、"git push" は常に origin にすべてをバックアップし、"git push heroku" は現在私がいるブランチを Heroku の master ブランチにプッシュし、必要ならそれを上書きするようにします。

これはうまくいくでしょうか?

[リモート "heroku"]。
    url = [email protected]:my-app.git
    push = +refs/heads/*:refs/heads/master

Herokuにダミーアプリを作ってそれで実験することもできると思いますが、実験を始める前にもっと経験豊富な人の意見を聞いてみたいです。

フェッチに関しては、Herokuのリポジトリが書き込み専用であっても、あまり気になりません。私はGitHubのような別のリポジトリを、すべての作業のバックアップとクローニングのために持っているのです。

脚注:この質問は、以下の質問と似ていますが、全く同じではありません。 Heroku で branches 戦略を使った Git の良いデプロイ方法とは?

解決方法は?

ワイルドカードを使用する場合、参照仕様の両側に存在する必要がありました。 +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