django和南迁与冲突(0007_two ...和0007_one)如何解决?

时间:2009-09-18 22:01:27

标签: 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时,南方从上次迁移中获取models = {}元数据,并且它在第一次迁移时缺少信息。这样做的结果是创建迁移0008,再次从第一个0007创建(!!!)更改。

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

目前我正在考虑两种选择:

  • 手动将0007迁移合并到一个文件中然后迁移(但有些必须执行“回滚”)

  • 手动将缺少的models = {}元组移至上一次0007迁移,然后0008中的下一个--auto将完美运行。

什么是更好的选择?或者还有其他我想念的东西?

1 个答案:

答案 0 :(得分:16)

执行migrate --merge或回滚 - 迁移后,如果您知道最近的迁移现在具有不准确的冻结模型,我只是为了引入冻结模型而创建一个新的无操作迁移最新。只需运行./manage.py startmigration myapp --empty freeze_noop。现在,您的冻结模型将在下次您想要自动检测实际迁移时保持最新状态。

创建无操作迁移可能看起来有点难看,但对我而言,这似乎比你建议的任何手动历史编辑选项都要简洁。您可以将无操作迁移视为相当于DVCS中的“合并提交”。

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