django和South移民冲突(0007_two ...和0007_one)如何解决?

标签 django migration django-south

我想在我的django项目中使用south作为迁移工具,但是在多用户方案中使用south时遇到问题:

同时在不同计算机上工作的两个开发人员创建了两个具有相同编号的迁移

第一台PC上的

  • :0007_extend_lizard.py
  • 第二台PC上的
  • :0007_swap_name_adopter.py

  • 在这种情况下,我可以运行./manage migrate --merge./manage migrate 0006(回滚),然后再次运行 ./manage migrate。但是,当我想在models.py中添加新字段并运行./manage startmigration southdemo --auto时,south从上一次迁移中获取models = {}元数据,并且它在第一次迁移中缺少信息。这样的结果是创建迁移0008,并且从第一个0007开始再次创建(!!!)更改。

    解决此问题的最佳方法是什么?

    目前,我正在考虑两种选择:
  • 手动将两个0007迁移合并到一个文件中,然后迁移(但有些必须执行“回滚”)
  • 手动将丢失的models = {}元数据移动到上一次0007迁移,然后0008中的下一个--auto将正常运行。

  • 有什么更好的选择?还是我还缺少其他东西?

    最佳答案

    在执行migrate --merge或回滚和迁移之后,如果您知道最近的迁移现在具有不正确的卡住模型,那么我将创建一个新的无操作迁移,以使卡住的模型保持最新状态。只需运行./manage.py startmigration myapp --empty freeze_noop即可。现在,您下次要自动检测实际迁移时,卡住的模型将是最新的。

    创建no-op迁移似乎有些丑陋,但是对我来说,这比您建议的任何手动历史记录编辑选项都更干净。您可以将无操作迁移视为DVCS中的“合并提交”。

    这个问题应该在this section of the South docs中提到;我已经提交了an issue for it。 (更新:现在是。)

    关于django和South移民冲突(0007_two ...和0007_one)如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1447016/

    相关文章:

    mysql - Python Mange.py syncDB - 数据库错误

    django - 不小心删除了我的django南迁移目录

    django - 使用 mod_wsgi for Django 配置 Apache 2 - 没有 httpd.conf 文件

    django - 在 Django 模板中播放 <audio></audio> 文件

    vb.net - MSFlexGridLib允许用户调整大小设置错误

    ruby-on-rails - 添加多态引用的向下迁移是什么

    python - Django:如何在启动时禁用数据库状态检查?

    python - Django 中的完整性错误

    django - 你如何让 Django 进行 RESTful 调用?

    mysql - Rails 应用程序错误 - ActiveRecord::PendingMigrationError 迁移正在挂起;运行 'rake db:migrate RAILS_ENV=development' 解决此问题