10

我想在我的 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 迁移,然后--auto0008 中的下一个将完美运行。

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

4

1 回答 1

16

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

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

这个问题应该在南方文档的这一部分中提到;我已经为它提交了一个问题。(更新:现在是。)

于 2009-09-19T17:01:48.613 回答