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

时间:2017-11-03 13:46:12

标签: python django django-migrations

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

(ex 0003_auto

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

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

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

  2. 使用标志--merge标志:

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

    修改

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

5 个答案:

答案 0 :(得分:2)

来自Django docs

  

由于迁移存储在版本控制中,因此您偶尔会遇到这样的情况:您和另一个开发人员都同时向同一应用提交了迁移,导致两次迁移的编号相同。

     

不用担心-这些数字仅供开发人员参考, Django只是在乎每个迁移都使用不同的名称 [已添加重点]。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以尝试在没有提示的情况下自动合并所有迁移(对于CI管道非常好):

python manage.py makemigrations --merge --noinput 

并执行迁移

python manage.py migrate

答案 3 :(得分:0)

最简单的方法是:

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

python manage.py migrate usersmaster 0021_signup_status

  1. 删除新的迁移文件。

  2. 重新进行迁移:

python manage.py makemigrations

答案 4 :(得分:0)

现在可以使用 django-migration-fixer

解决这个问题

可以使用

在您的开发分支上修复迁移
$ git checkout [dev-branch]
$ git merge [main/master]

按照安装说明here

运行

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

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

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