競合するジャンゴと南の移行(0007_two…と0007_one)解決方法
-
22-07-2019 - |
質問
移行ツールとしてdjangoプロジェクトでsouthを使用したいのですが、マルチユーザーシナリオでsouthを使用する際に問題があります:
異なるマシンで同時に作業している2人の開発者は、同じ番号の2つの移行を作成します
-
最初のPC:
0007_extend_lizard.py
-
2番目のPC:
0007_swap_name_adopter.py
この場合、 ./ manage migrate --merge
または ./ manage migrate 0006
(ロールバック)を実行し、 again を実行できます< code> ./ manage migrate 。しかし、新しいフィールドを models.py
に追加して ./ manage startmigration southdemo --auto
を実行する場合、soutは models = {}
を取得します最後の移行からのメタデータ、および最初の移行からの情報が欠落しています。この結果、マイグレーション0008が作成され、最初の0007から再度(!!!)変更が作成されます。
この問題を解決する最良の方法は何ですか?
現在、私は2つのオプションについて考えています:
-
両方の0007移行を1つのファイルに手動でマージしてから移行します(ただし、一部は&quot; rollback&quot;を実行する必要があります)
-
欠落している
models = {}
メタを手動で最後の0007移行に移動し、次に0008の次の-auto
が完全に機能します。
より良いオプションは何ですか?それとも私が行方不明になっている何か他のものがありますか?
解決
migrate --merge
またはrollback-and-migrateを実行した後、最新の移行に不正確な凍結モデルが含まれていることがわかっている場合は、新しいno-op移行を作成します凍結モデルを最新にする目的。 ./ manage.py startmigration myapp --empty freeze_noop
を実行するだけです。これで、次回の実際の移行を自動検出するために、凍結モデルが最新になります。
無操作の移行を作成するのは少しいように思えるかもしれませんが、私にとっては、これはあなたが提案した手動の履歴編集オプションのどちらよりもきれいに見えます。 no-op移行は、「マージコミット」に相当すると考えることができます。 DVCSで。
この問題は、 South docsのこのセクションで言及する必要があります; その問題を提出しました。 (更新:現在はそうです。)