以下摘自有关Team Workflow的 South 官方文档部分,
第二件事要注意的是,当您通过他们自己的迁移完成其他人的模型更改时,您需要创建一个新的空迁移,其中冻结两个开发分支的更改(如果您使用过 mercurial ,这相当于合并提交)。
我不明白为什么在这种情况下需要创建一个新的空迁移。开发人员不应该./manage.py migrate
在从其他人那里提取模型更改(以及相应的迁移)之后运行吗?我在这里想念什么?
以下摘自有关Team Workflow的 South 官方文档部分,
第二件事要注意的是,当您通过他们自己的迁移完成其他人的模型更改时,您需要创建一个新的空迁移,其中冻结两个开发分支的更改(如果您使用过 mercurial ,这相当于合并提交)。
我不明白为什么在这种情况下需要创建一个新的空迁移。开发人员不应该./manage.py migrate
在从其他人那里提取模型更改(以及相应的迁移)之后运行吗?我在这里想念什么?
我相信这意味着如果两个分支都对同一个模型进行了更改,那么最好合并代码并为这些更改重新创建一个迁移脚本。这是因为如果 branch1 有一个 0006 迁移脚本,而 branch2 有另一个 0006 迁移脚本(你知道南如何按顺序命名它们......)那么你不能正确地自动合并它们,因为它们实际上是不同的文件。
因此,您需要合并代码更改,然后为合并的分支重新创建迁移脚本。
我们遇到了与这件作品有关的问题。假设我们有一个模型:
class Article(Model):
title = CharField()
开发人员 1 在他的分支上添加一个字段,比如说,author
(迁移冻结标题,作者) 开发人员 2date_published
在他的分支上添加一个字段(迁移冻结标题,date_published)
然后有人合并了两个分支。他们得到的是两个迁移,一个不知道date_published
,另一个没有见过 field author
。
这可能导致南试图在下次创建自动迁移时添加作者或 date_published 字段(无论最后添加了什么迁移),因为它根本不知道 100% 正确的数据库状态,它不会在迁移中冻结。