2009-09-18 9 views
10

私は移行ツールとしての私のDjangoプロジェクトに南使用したいが、私は、マルチユーザーシナリオで南使用に問題がある:Djangoと紛争による南の移動(0007_two ...と0007_one)解決方法?

異なるマシン上で同時に動作する2人の開発者が同じ番号を持つ2つの移行を作成

  • 最初のPC上:0007_extend_lizard.py秒PC上

  • 0007_swap_name_adopter.py

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

この問題を解決するにはどうすればよいですか?

現在、私は約2オプション思っています:

  • 手動models = {}が不足して動かす手動で1つのファイルに0007の移行の両方をマージしてから移行する(ただし、いくつかのいずれかが「ロールバック」を実行しなければなりません)

  • メタを移動させて0008を移動させ、0008の次の--autoは完全に動作します。

どのようなオプションが適していますか?それとも、私は行方不明ですか?

答えて

16

migrate --mergeを実行した後、または最新の移行で不適切な固定モデルが見つかった場合は、固定されたモデルを最新の状態にするために、新しいno-op移行を作成します。ちょうど./manage.py startmigration myapp --empty freeze_noopを実行してください。今度は、実際にマイグレーションを自動検出するときに、フリーズされたモデルが最新の状態になります。

ノーオペレーションの移行を作成するのはちょっと醜いかもしれませんが、これは私が提案した手動の履歴編集オプションよりもきれいです。ノーオペレーションの移行は、DVCSの「マージコミット」と同等と考えることができます。

この問題は、this section of the South docsに記載する必要があります。私はan issue for itを提出しました。 (更新:今それです)

関連する問題