2

我正在使用 South 在我的开发和生产环境中管理模式和数据迁移。因此,我将迁移保存在我的 git 存储库中,因此我在开发中所做的更改可以在生产中正确迁移。

我正在开发的应用程序和项目目前是私有的,仅由我开发。在某个时候,我想发布/分发我的应用程序。我假设到那时,我将有一个“最终”模式,因此不会“需要”南方。由于这些应用程序以前没有分发过(除了在我的环境中),公共版本不需要我在开发应用程序时使用的迁移。

我有一个两部分的问题:

  1. 根据我的假设删除或至少“清理”迁移是好的(或可接受的)吗?

  2. 这样做的最佳方法是什么?我想为公共/分布式基地保留一个分支可能会起作用,但我对 git 还很陌生,所以我不知道我的选择是什么。

谢谢,

4

1 回答 1

3

对于处理 South 和版本控制的人来说,这是一个常见的混淆点。当然,您应该在您的项目中提交迁移,因为其他人需要自己运行相同的迁移。但是,您应该在提交迁移之前清理它们,这实际上看起来很容易。

如果它是一个全新的应用程序或一个全新的项目:

  1. 将应用回滚到“零”:

    python manage.py migrate myapp zero
    
  2. 删除应用程序的所有迁移(“迁移”目录中的所有内容,除了__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
    

无论哪种方式,您最终都会得到一个包含所有更改的文件,而不是多个文件。然后,您将其提交给您的源代码管理。

于 2012-09-24T17:02:18.213 回答