10

django プロジェクトで south を移行ツールとして使用したいのですが、マルチユーザー シナリオで south を使用すると問題が発生します。

異なるマシンで同時に作業している 2 つの開発者が、同じ番号の 2 つの移行を作成します

  • 最初の PC で:0007_extend_lizard.py

  • 2 番目の PC で:0007_swap_name_adopter.py

この場合、実行./manage migrate --mergeまたは./manage migrate 0006(ロールバック) して再度 ./manage migrate実行できます。models.pyしかし、新しいフィールドを追加して実行したい場合./manage startmigration southdemo --auto、南はmodels = {}最後の移行からメタデータを取得し、最初の移行からの情報が欠落しています。この結果、移行 0008 が作成され、最初の 0007 から再び (!!!) 変更が作成されます。

この問題を解決する最善の方法は何ですか?

現在、私は2つのオプションについて考えています:

  • 両方の 0007 移行を手動で 1 つのファイルにマージしてから移行します (ただし、「ロールバック」を実行する必要があります)。

  • models = {}不足しているメタを最後の 0007 移行に手動で移動すると--auto、0008 の次の移行が完全に機能します。

より良いオプションは何ですか? それとも、私が見逃しているものがありますか?

4

1 に答える 1

16

またはロールバックと移行を実行した後migrate --merge、最新の移行で不正確な凍結モデルが含まれていることがわかっている場合は、凍結モデルを最新の状態にする目的で、新しい操作なしの移行を作成するだけです。実行するだけ./manage.py startmigration myapp --empty freeze_noopです。これで、次に実際の移行を自動検出するときに、凍結されたモデルが最新の状態になります。

操作なしの移行を作成するのは少し醜いように思えるかもしれませんが、私には、これはあなたが提案した手動の履歴編集オプションのいずれよりもきれいに思えます。オペレーションなしの移行は、DVCS の「マージ コミット」に相当すると考えることができます。

この問題は、South docs のこのセクションで言及する必要があります。問題を提出しました。(更新:現在はそうです。)

于 2009-09-19T17:01:48.613 に答える