1

だから、私は実験しているアプリを持っています。

develop私のブランチの現在の状態は良好です。spree をインストールしたいのですが、それにはデータベースへの多くの移行と変更が伴います。

そのため、自分のブランチに基づいて、シュプレー専用の新しいブランチを作成しましたdevelop

私は宝石をインストールし、移行を実行しました。

しかし、私はいくつかのものを台無しにしたので、自分のブランチに戻したいと思ってdevelopブランチを削除しましたspree

私はschema.rb正常に戻り、DBも正常に戻ると思いました。

しかし、私は私のものを見てSchema.rb、Spree テーブルがたくさんあります。

それだけでなく、ブランチSchema.rbに移行を作成して「ドロップ」したことがわかっている他のテーブルも表示されます。spree

したがって、たとえば、ドロップされるべきであることがわかっているordersテーブルが私の中にあります。Schema.rb少し混乱したので、ordersspree をインストールする前に削除した他のテーブルと一緒にテーブルを削除する新しい移行を作成することにしました。テーブルが存在しないという PG エラーが表示されます。

だから....今、私のschema.rbとDBが同期していないようです。

さらに悪いことに、schema.rb とdb/migrateフォルダーが同期しません。

create_tableそこにあるはずのないテーブルの schema.rb 内のステートメントを手動で削除するつもりでしたが、それはすべて混乱しています。

この穴から抜け出すにはどうすればよいですか? また、今後それを防ぐにはどうすればよいでしょうか?

要約すれば

DB

スプリー前の状態

  • 表 A
  • 表 B
  • 表 C

酒宴状態

  • 表 A (削除済み)
  • 表 B (削除済み)
  • 表 C
  • Spree_Table_A
  • Spree_Table_B

スプリー後の状態

  • 表 A (削除済み)
  • 表 B (削除済み)
  • 表 C
  • Spree_Table_A
  • Spree_Table_B

基本的にSpree Stateと同じ

DB/移行フォルダー

スプリー前の状態

  • テーブル A の移行
  • 表 B の移行
  • 表 C の移行

酒宴状態

  • テーブル A を削除するための移行
  • テーブル B を削除するための移行
  • 表 C の移行
  • Spree_Table_A の移行
  • Spree_Table_B の移行

スプリー後の状態

  • テーブル A の移行
  • 表 B の移行
  • 表 C の移行

「Post-Spree State」の移行は、「Post-Spree State」の DB の状態と同期しないことに注意してください。

4

2 に答える 2

1

コメントがかなり長くなってきたので、コメントを回答に変換しました。

開発データベースの単なるスナップショットであっても、新しいブランチ用に別のデータベースを用意する方が安全です。スプリー ブランチからマイグレートを復元し (可能であれば)、ダウンを実行して、データベースを元の場所に戻す必要があります。

rake db:migrate VERSION=xxx 

xxxまくる前の最後の移行の数に等しい場所

私は git の専門家ではありませんが、ブランチが git によって削除された場合、このスレッドが復元に役立つ可能性があります。ローカルでのみ削除した場合は、もう一度チェックアウトできるはずです。

Git: 削除された (リモート) ブランチを復元する

于 2013-05-28T08:30:12.403 に答える