繁体   English   中英

Django:合并迁移冲突的最佳方式

[英]Django: Best way to merge migrations conflicts

我目前正在开发一个 dev 分支,有一天我需要将它合并到 master 中。 我的 dev 分支上有多达 20 个迁移文件,目前在 master 分支上有大约相同的数量。 我需要在两个分支上进行迁移,这将导致迁移具有相同的前缀,

(例如0003_auto

换句话说,如果您有由具有相同前缀的makemigrations生成的迁移文件,那么处理此问题的最佳/安全方法是什么。

以下是我自己想到的两种方式(也许完全错误):

  1. 删除所有迁移文件,合并代码,然后运行新的makemigrationsmigrate ,这将导致只有一个迁移文件。

  2. 使用--merge标志让 django 进行合并:

     makemigrations --merge

现在,知道了这一切,我想知道处理这个问题的最佳方法是什么。 一般来说,我应该使用什么来正确合并冲突,并在每次 model 更新时为我提供一个新版本的项目。

编辑

我认为提供一个逐步的解决方案对我和未来的用户来说是理想的,因为有大量关于这个主题的信息,但似乎没有一个是简洁明了的。

无需担心的最简单方法是:

  1. 恢复到稳定点(冲突前):

python manage.py migrate usersmaster 0021_signup_status

  1. 删除新的迁移文件。

  2. 重新进行迁移:

python manage.py makemigrations

来自Django文档

由于迁移存储在版本控制中,因此您偶尔会遇到您和其他开发人员同时迁移到同一个应用程序的情况,从而导致两次迁移具有相同的数量。

不要担心 - 数字只是供开发人员参考, Django只关心每个迁移都有不同的名称 [强调添加]。

准备好后,您应该从master合并到开发分支。 那时你应该修复所有的冲突,你的迁移应该在master的迁移之后进行,并且在所有这些之后你的数据库应该像你想要的那样。

由于这个过程需要时间,而且非常痛苦,因此大多数人都会考虑短期的生活发展分支。 这样,您需要一次处理一个或两个迁移文件。

您可以尝试自动合并所有迁移而不提示(非常适合CI管道):

python manage.py makemigrations --merge --noinput 

并执行迁移

python manage.py migrate

您可以使用django-migration-fixer解决迁移错误

可以使用以下方法修复开发分支上的迁移

$ git checkout [dev-branch]
$ git merge [main/master]

按照此处的安装说明进行操作

跑步

$ python manage.py makemigrations --fix -b [main/master]

提交更改并推送到远程分支

$ git add .
$ git commit -am ...
$ git push ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM