12

我有一个关于如何在团队中使用 Django-South 的简短问题。

如果两个人同时对同一文件的更改创建迁移文件会发生什么?

例如,A 和 B 正在开发同一个 Django 应用程序。他们在不同的分支工作,并且都在迁移 005。现在,A 和 B 都修改了 apple/models.py 并使用 startmigration 创建了迁移文件。他们都在迁移 006,但迁移文件 006 完全不同。我猜当他们合并分支时,South 可能会出现一些错误。

有什么办法可以解决这个冲突吗?还是南方足够聪明,可以自己解决?

4

1 回答 1

20

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 不能替代团队协调 - 事实上,大多数功能纯粹是为了警告您尚未协调,并且提供的简单合并仅适用于简单的情况。确保您的团队知道谁在做什么,这样他们就不会编写同时影响数据库相同部分的迁移。

于 2012-08-07T12:57:13.783 回答