我目前正在开发一个分支,有一天我需要将其合并到master。我的dev分支上有多达20个迁移文件,目前master上的迁移文件数量大致相同。我需要在两个分支上进行迁移,这将导致具有相同前缀的迁移
(不包括0003_auto
)
换句话说,如果makemigrations
生成的迁移文件具有相同的前缀,那么处理此问题的最佳/安全方式是什么。
以下是我对自己的两种看法(可能完全错误):
-
删除所有迁移文件,合并代码,然后运行新的
makemigrations
和migrate
,这将只产生一个迁移文件。 -
使用
--merge
标志让django进行合并:makemigrations --merge
现在,知道了这一切,我想知道处理这件事的最佳方法是什么。一般来说,我应该使用什么来正确地合并冲突,并在每次模型更新时为我的项目提供一个新版本。
编辑
我认为提供一个循序渐进的解决方案对我和未来的用户来说都是理想的,因为有很多关于这个主题的信息,但似乎没有一个是简洁明了的。
来自Django文档:
由于迁移存储在版本控制中,您偶尔会遇到这样的情况:您和另一位开发人员同时向同一应用程序提交了迁移,导致两次迁移的数量相同。
别担心,这些数字只是供开发人员参考的,Django只关心每个迁移都有一个不同的名称[emphasis added]。
不用担心,最简单的方法是:
- 恢复到稳定点(冲突前):
python manage.py migrate usersmaster 0021_signup_status
-
删除新的迁移文件。
-
重新进行迁移:
python manage.py makemigrations
准备好后,您应该从master合并到您的开发分支。那时,您应该修复所有冲突,迁移应该在master的迁移之后进行,在所有这些之后,您的数据库应该是您想要的样子。
由于这一过程需要时间,而且非常痛苦,大多数人都考虑短期发展分支。这样一来,您需要一次处理一到两个迁移文件。
您可以使用django迁移修复程序解决迁移错误
可以使用修复开发分支上的迁移
$ git checkout [dev-branch]
$ git merge [main/master]
按照此处的安装说明
运行
$ python manage.py makemigrations --fix -b [main/master]
提交更改并推送到远程分支
$ git add .
$ git commit -am ...
$ git push ...