South 的文档讨论了这个问题:
当不止一个人在同一时间段内进行迁移时,团队和迁移的问题就会出现,并且他们都在没有应用另一个人的情况下提交。这类似于两个人同时在 VCS 中编辑同一个文件,并且与 VCS 一样,South 有解决问题的方法。
如果发生这种情况,首先要注意的是 South 会检测到问题,并发出如下消息:
Inconsistent migration history
The following options are available:
--merge: will just attempt the migration ignoring any potential dependency
conflicts.
如果您使用 重新运行迁移--merge
,South 将简单地应用丢失的迁移。这通常是可行的,因为团队正在开发不同的模型;如果没有,您需要查看实际的迁移更改并手动解决它们,因为它们很可能会发生冲突。
第二件事要注意的是,当您通过他们自己的迁移完成其他人的模型更改时,您需要创建一个新的空迁移,其中冻结两个开发分支的更改(如果您使用过 mercurial ,这相当于合并提交)。为此,只需运行:
./manage.py schemamigration --empty appname merge_models
(请注意,这merge_models
只是一个迁移名称;可以随意更改)
这里的重要信息是 South 不能替代团队协调 - 事实上,大多数功能纯粹是为了警告您尚未协调,并且提供的简单合并仅适用于简单的情况。确保您的团队知道谁在做什么,这样他们就不会编写同时影响数据库相同部分的迁移。