首页 文章

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

提问于
浏览
10

我想在我的django项目中使用south作为迁移工具,但是我在多用户场景中使用south有问题:

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

  • 在第一台PC上: 0007_extend_lizard.py

  • 在第二台PC上: 0007_swap_name_adopter.py

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

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

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

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

  • 手动移动缺少的 models = {} meta到0007迁移,然后0008中的下一个 --auto 将完美地运行 .

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

1 回答

  • 16

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

    也许创建无操作迁移似乎有点难看,但对我来说这似乎比你建议的任何手动历史编辑选项都要清晰 . 您可以将无操作迁移视为DVCS中“合并提交”的等效物 .

    这个问题应该在_2553930中提及;我已经提交了an issue for it . (更新:现在是 . )

相关问题