我想在我的django项目中使用south作为迁移工具,但是在多用户方案中使用south时遇到问题:
同时在不同计算机上工作的两个开发人员创建了两个具有相同编号的迁移
第一台PC上的
0007_extend_lizard.py
0007_swap_name_adopter.py
在这种情况下,我可以运行
./manage migrate --merge
或./manage migrate 0006
(回滚),然后再次运行 ./manage migrate
。但是,当我想在models.py
中添加新字段并运行./manage startmigration southdemo --auto
时,south从上一次迁移中获取models = {}
元数据,并且它在第一次迁移中缺少信息。这样的结果是创建迁移0008,并且从第一个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/