【问题标题】:django and south migration with conflicts (0007_two ... and 0007_one) how to solve?django 和南迁移有冲突(0007_two ... and 0007_one)怎么解决?
【发布时间】:2010-11-29 15:23:09
【问题描述】:

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

在不同机器上同时工作的两个开发者创建两个具有相同编号的迁移

  • 在第一台电脑上:0007_extend_lizard.py

  • 在第二台电脑上: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 将完美运行。

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

【问题讨论】:

    标签: django migration django-south


    【解决方案1】:

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

    也许创建无操作迁移似乎有点难看,但对我来说,这似乎比您建议的任何手动历史编辑选项更干净。您可以将无操作迁移视为 DVCS 中的“合并提交”。

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

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2011-09-28
      • 2011-04-03
      • 1970-01-01
      • 2012-06-05
      • 2014-05-02
      • 2019-11-23
      • 2014-06-22
      相关资源
      最近更新 更多