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

And*_*iwa 10 migration django 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迁移,然后--auto0008中的下一个将完美地运行.

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

Car*_*yer 16

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

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

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