南:为什么在引入其他开发人员的模型更改时创建新的空迁移?

时间:2012-07-13 19:53:46

标签: django django-south

以下摘自Team Workflow上的官方南方文件部分,

  

要注意的第二件事是,当您通过自己的迁移完成其他人的模型更改时,您需要进行一个新的空迁移,其中包含两个开发分支的更改(如果您'使用mercurial,这相当于合并提交。

我不明白为什么在这种情况下需要创建一个新的空迁移。在从其他人那里获取模型更改(以及相应的迁移)后,开发人员是否应该只运行./manage.py migrate?我在这里错过了什么?

2 个答案:

答案 0 :(得分:1)

我认为这意味着如果两个分支都对同一个模型进行了更改,那么最好合并代码并为这些更改重新创建一个迁移脚本。这是因为如果branch1有一个0006迁移脚本,而branch2有另一个0006迁移脚本(你知道南方如何顺序命名它们......)那么你就无法正确地自动合并它们,因为它们实际上是不同的文件。

因此,您需要合并代码更改,然后为合并的分支重新创建迁移脚本。

答案 1 :(得分:1)

我们遇到了与此相关的问题。假设我们有一个模型:

class Article(Model):
    title = CharField()         

开发人员1在其分支上添加一个字段,例如author(迁移冻结标题,作者) 开发人员2在他的分支上添加了一个字段date_published(迁移冻结了标题,date_published)

然后有人合并了两个分支。他们得到的是两次迁移,其中一人不知道date_published而另一人没有看到author字段。

这可能会导致南方尝试在下次创建自动迁移时添加author或date_published字段(最后添加的迁移),因为它根本不知道100%正确的db状态,它不会在迁移中冻结