20

gitリポジトリ内にWebアプリケーションがあります。歴史的な理由により、Webアプリケーションはリポジトリのルートになく、。というフォルダ内にありますwebsite。他にもいくつかのフォルダがあるので、次の構造になっています。

myApp
+- .git
+- otherFolder1
+- otherFolder2
+- otherFolder...
+- otherFolderN
+- website

WebサイトはHerokuで運営されています。Herokuは、Webアプリケーションがgitリポジトリのルートにあることを要求するため、これまでwebsite、独自のgitリポジトリを持つ完全に異なる(外部)フォルダーにフォルダーをコピーするビルドプロセスを使用していました。その後、そこからHerokuにプッシュすることができ、すべてが順調でした。

gitにsubtreeコマンドが含まれているので、最初のフォルダーから直接プッシュできるので、これはもう必要ありませんがwebsite、次を使用してサブフォルダーだけをプッシュできます。

git subtree push --prefix=website heroku master

基本的に、これは完全に機能します。問題は1つだけです。Herokuへの以前のコミットは完全に異なるgitリポジトリからのものであるため、両方の履歴が互いに一致しません。したがって、Herokuは非早送りプッシュを検出し、subtreeプッシュを拒否します。

では、どうすればこれに対処できますか?

  • アイデア1:強制プッシュ。それを試しましたが、オプション(または同様のもの)がないため機能しgit subtree pushません。--force
  • アイデア2:Herokuのリポジトリをクリアして、最初からやり直します。

アイデア2を採用したいのですが、これを実現する方法がわかりません。

私の最初のアプローチはを実行することでしたgit push heroku :masterが、Herokuはこれを検出して拒否します。

もちろん、アプリを破棄して再作成することもできますが、そうすると、すべてのドメイン割り当てとアドオンも失われるので、それを避けたいと思います。

他のアイデアはありますか?

4

2 に答える 2

53

git コマンドをネストして強制プッシュを実行できます。

あなたの場合、コマンドは次のようになります。

git push heroku `git subtree split --prefix website master`:master --force
于 2012-11-15T18:10:58.030 に答える