如何作为一个团队管理版本控制的 Django 迁移?

Posted

技术标签:

【中文标题】如何作为一个团队管理版本控制的 Django 迁移?【英文标题】:How to manage version controlled Django migrations as a team? 【发布时间】:2020-08-24 07:03:34 【问题描述】:

我们是一个开发受版本控制的 Django 3 项目的小型开发团队。我们担心使用迁移以及覆盖彼此迁移文件的可能性。

我们考虑过的选项:

使用makemigrations--name / -n 选项来进行命名约定,但这似乎很麻烦 Django documentation 提到了版本控制工具,但我没有看到太多关于它的细节。

其他团队如何处理这个问题?

【问题讨论】:

【参考方案1】:

使用版本控制(git 等)将解决您的问题。

只需确保开发人员在分支上工作,而不是直接在 master 上工作。这样,迁移将是可见的,如果存在冲突,git 会在您尝试合并到 master 分支时通知您。如果您使用 GitHub,则更加明显,因为您可以在 UI 中看到拉取请求的冲突。

您在这里遇到的唯一问题是,如果在两个 PR 中的同一个应用程序中生成了两个迁移。最后合并到主节点的会导致问题,因为会有多个叶节点,但这可以使用./manage.py makemigrations --merge 轻松解决,理想情况下您应该运行./manage.py makemigrations --check 以查看在合并内容之前是否有问题 - 在例如,持续集成。

【讨论】:

谢谢!我们正在努力避免在不同分支上生成的迁移最终会自动生成相同的名称。 这不会发生。发生这种情况的唯一方法是只有一个更改。否则,Django 将使用时间戳,因此两个开发人员必须在同一分钟生成它们。如果只有一项更改,则使用字段或模型的名称。在实践中我从未见过这种情况发生,通常开发人员不会同时在同一个模型上工作,但即使这样做,你也会在 git 中遇到合并冲突,此时你会知道你需要生成一个新的迁移,并在其中一个分支上给它一个唯一的名称。 你知道...我想我从来没有注意到这一点!谢谢!

以上是关于如何作为一个团队管理版本控制的 Django 迁移?的主要内容,如果未能解决你的问题,请参考以下文章

直播预告:版本管理之Git崛起,如何从SVN向Git迁移

如何创建 django-oscar 产品类作为数据迁移

NodeJS 应用程序数据库版本控制和数据迁移

SVN常用功能介绍

如何控制 Django migrate 创建的表名

将旧 (Django 0.97) 模型数据导入/迁移到 Django 1.8 或更高版本