2

私はSouthを使用して、開発環境と本番環境でのスキーマとデータの移行を管理しています。そのため、移行をgitリポジトリに保持して、開発で行った変更が本番環境で適切に移行されるようにします。

私が開発しているアプリとプロジェクトは現在非公開であり、私だけが開発しています。いつか、自分のアプリを公開/配布したいと思います。その時点で、私は「最終的な」スキーマを持っているので、南を「必要」とはしないと思います。これらのアプリは以前に配布されたことがないため(私の環境を除く)、パブリックバージョンでは、アプリの開発中に使用した移行は必要ありません。

私は2つのパートの質問があります:

  1. 私の仮定に基づいて移行を削除するか、少なくとも「クリーンアップ」するのは良い(または許容できる)ですか?

  2. そうするための最良の方法は何ですか?パブリック/分散ベースのブランチを維持することはうまくいくと思いますが、私はgitにかなり慣れていないので、私のオプションが何であるかわかりません。

ありがとう、

4

1 に答える 1

3

これは、サウスとバージョン管理を扱う人々にとってよくある混乱のポイントです。もちろん、他の人が同じ移行を自分で実行する必要があるため、プロジェクトで移行をコミットする必要があります。ただし、移行をコミットする前にクリーンアップする必要があります。これは実際には一見簡単です。

まったく新しいアプリまたは一般的な新しいプロジェクトの場合:

  1. アプリを「ゼロ」にロールバックします。

    python manage.py migrate myapp zero
    
  2. アプリのすべての移行を削除します(「migrations」ディレクトリ内のすべてを除く__init__.py)。

  3. 新しい初期移行を生成します。

    python manage.py schemamigration --initial myapp
    

既存のアプリの場合、プロセスはほぼ同じですが、作成した最初の新しい移行の直前にのみロールバックします。そして、最初の移行ではなく、新しい自動移行を生成するだけです。たとえば、アプリがすでに移行0005にあり、移行0006、0007、および0008を作成した場合:

  1. 作成した最初の移行の直前にロールバックします(0006):

    python manage.py migrate myapp 0005
    
  2. 作成したすべての新しい移行を削除します(0006、0007、および0008)

  3. 新しい自動移行を生成します。

    python manage.py schemamigration --auto myapp
    

いずれにせよ、複数のファイルではなく、1つのファイルですべての変更をカプセル化することになります。次に、これをソース管理にコミットします。

于 2012-09-24T17:02:18.213 に答える