12

チームで作業しているときに Django-South を使用する方法について簡単な質問があります。

2 人のユーザーが同じファイルへの変更で同時に移行ファイルを作成するとどうなりますか?

たとえば、A と B が同じ Django アプリで作業しているとします。彼らは別のブランチで作業しており、両方とも移行 005 で作業しています。現在、A と B の両方が apple/models.py を変更し、startmigration を使用して移行ファイルを作成しています。どちらも移行 006 ですが、完全に異なる移行ファイル 006 を使用しています。ブランチをマージするときに、South にエラーが発生する可能性があります。

この競合を解決する回避策はありますか? それとも、サウスはそれを自分で解決できるほど頭がいいのでしょうか?

4

1 に答える 1

20

South のドキュメントでは、この問題について次のように説明されています。

チームと移行に関する問題は、複数の人が同じタイムスロットで移行を行い、他の人が適用されずに両方がコミットされた場合に発生します。これは、2 人の人が同時に VCS で同じファイルを編集することに似ており、VCS と同様に、South には問題を解決する方法があります。

これが発生した場合、最初に注意すべきことは、South が問題を検出し、次のようなメッセージを発行することです。

Inconsistent migration history
The following options are available:
    --merge: will just attempt the migration ignoring any potential dependency
        conflicts.

で移行を再実行すると--merge、South は順不同で欠落していた移行を単純に適用します。チームは別々のモデルで作業しているため、これは通常うまくいきます。そうでない場合は、競合する可能性があるため、実際の移行の変更を確認して手動で解決する必要があります。

2 番目に注意すべきことは、他の誰かのモデルの変更を自分の移行で完全に取り込む場合、開発の両方のブランチからの変更が凍結された新しい空の移行を作成する必要があることです (mercurial を使用した場合)。 、これはマージコミットと同等です)。これを行うには、次のコマンドを実行するだけです:

./manage.py schemamigration --empty appname merge_models

(これmerge_modelsは単なる移行名であることに注意してください。好きなように変更してください)

ここでの重要なメッセージは、South はチームの調整に代わるものではないということです。実際、ほとんどの機能は、調整が行われていないことを警告するためのものであり、提供されている単純なマージは簡単な場合にのみ使用されます。チームが誰が何に取り組んでいるのかを把握して、DB の同じ部分に同時に影響する移行を作成しないようにしてください。

于 2012-08-07T12:57:13.783 に答える