web-dev-qa-db-ja.com

Django:移行の競合をマージするための最良の方法

私は現在開発ブランチに取り組んでおり、いつかマスターにマージする必要があります。現在、devブランチには最大20個の移行ファイルがあり、masterにはほぼ同じ数のファイルがあります。両方のブランチで移行を行う必要がありました。これにより、同じプレフィックスを持つ移行が発生します。

(例0003_auto

言い換えると、同じプレフィックスを持つmakemigrationsによって生成された移行ファイルがある場合、これを処理するための最良の/安全な方法は何ですか。

これが私が自分で考えた2つの方法です(おそらく完全に間違っています):

  1. すべての移行ファイルを削除し、コードをマージしてから、新しいmakemigrationsmigrateを実行すると、移行ファイルは1つだけになります。

  2. --mergeフラグを使用してDjangoをマージします:

    makemigrations --merge
    

さて、これをすべて知って、これを処理する最良の方法が何であるかを知りたいと思います。一般に、競合を正しくマージし、モデルが更新されるたびにプロジェクトの新しいバージョンを取得するために何を使用すればよいですか。

[〜#〜]編集[〜#〜]

ステップバイステップのソリューションを提供することは、このテーマに関する情報がたくさんあるので、私と将来のユーザーにとって理想的だと思いますが、簡潔で明確なものはないようです。

9
scharette

Django docs から:

移行はバージョン管理に保存されるため、自分と別の開発者の両方が同時に同じアプリへの移行をコミットし、同じ数の2つの移行が発生する状況に遭遇することがあります。

心配しないでください-数字は開発者の参照用にありますDjangoは、移行ごとに異なる名前が付いていることを気にします[強調を追加]。

7
ostergaard

プロンプトなしですべての移行を自動的にマージしようとすることができます(CIパイプラインに最適):

python manage.py makemigrations --merge --noinput 

移行を実行します

python manage.py migrate
0
Luigi Lopez

準備ができたら、マスターから開発ブランチにマージする必要があります。その時点で、すべての競合を修正する必要があります。移行はマスターの移行の後に行われる必要があります。その後、データベースは希望どおりに表示されるはずです。

そのプロセスには時間がかかり、非常に苦痛であるため、ほとんどの人は短命の開発ブランチを検討します。そうすれば、一度に1つまたは2つの移行ファイルを処理する必要があります。

0