2012-08-07 12 views
12

チームで働いているときにDjango-Southの使い方について短い質問があります。Djangoチーム内で働いているときの南の移行の競合

2人で同じファイルを変更したときに移行ファイルを同時に作成するとどうなりますか?

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

この競合を解決するための回避策はありますか?あるいは、それだけでそれを解決するのに十分なほどスマートなのでしょうか?

答えて

19

この問題に関する韓国のdocumentation会談:

つ以上の人 が、同じタイムスロット内移行を行う際のチームおよび移行の問題が発生し、それらの両方が、他方は適用されずに をコミット取得。これは、VCSの同じファイルを同時に編集する2人のユーザ に似ています.VCSのように、South に問題を解決する方法があります。

この問題が発生した場合は、最初に注意する事は、南は 問題を検出し、このようなメッセージを発行することです:あなたが再実行--mergeに移行する場合

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

を、南は単純に適用されます 移行が欠落していました。これは通常、 チームが別々のモデルで作業しているため動作します。そうでない場合は に実際の移行の変更を見て手動で解決する必要があります。 これは競合する可能性が高いためです。

注意すべき2つ目は、あなたが自分自身の移行を完備し、他の誰かの モデルの変更に引っ張ったとき、あなたは中で凍結 開発の両方のブランチからの変更を持っている 新しい空の移行を作成する必要があります、ということです(水銀を使用した場合、これは とマージコミットに相当します)。そのためには、単に実行します。

./manage.py schemamigration --empty appname merge_models 

merge_modelsがちょうど移行名であることに注意してください。あなたが好きな のためにそれを変更する)

ここで重要なメッセージは、韓国チーム コーディネートに代わるものではありませんということです - 実際には、機能のほとんどは純粋に警告することです あなたが調整していないと、簡単に提供するための簡単な合併は しかありません。あなたのチームが誰に何をしているのかを確認してください。 は、DBと同じ部分に同時に影響を与えるマイグレーションを書いていません。

+1

これはドキュメントを読むのが良いことを示しています。)+1 – Tadeck

関連する問題