如何通过migraions-ids链接两次迁移,并创建一个线性链来折叠分支



我将flask应用程序部署到heroku中。当我运行这个命令时,我会得到一个错误。

heroku run python manage.py deploy 

这是错误消息:

提升util。CommandError('仅支持单个头。'alembic.util.CommandError:只支持单个头。脚本目录有多个头(由于分支),必须通过手动编辑修订文件以形成线性序列运行alembic分支以查看分歧。

我在谷歌上搜索了一下,然后得到了这个:

当您返回到不是最后一次的修订时,就会发生这种情况,并且然后创建一个新的迁移。现在你有两个分支,Alembic无法处理查看迁移文件是如何链接在一起的通过迁移id,您需要创建一个线性链来折叠树枝

但我仍然对如何解决这个问题感到困惑。我认为问题是由git分支引起的。(我试图合并两个分支,但没有成功?)

看起来你引用了我很久以前在一篇博客文章中的一条评论。从那以后,我写了一篇文章,专门讨论解决迁移冲突的主题:http://blog.miguelgrinberg.com/post/resolving-database-schema-conflicts

这在文章中有解释,但基本上,必须编辑迁移脚本,使它们形成一个线性序列。每个脚本都有一个指向其前任的指针,当您有两个或多个具有相同前任的脚本时,就会发生冲突。假设您有迁移B和C,两者都以A为前置。类似这样的东西:

--> B
A __/

--> C

假设您处于迁移B,则无法应用C迁移,因为它位于不同的分支上。解决冲突的一种可能方法是将C脚本中的前一个脚本从A更改为B。然后迁移链变为:

A --> B --> C

所以现在Alembic可以从B移动到C。

最新版本的Alembic支持的另一个选项是使用merge命令创建合并迁移。我在文章中也简要介绍了这一点,但这不是我的首选解决方案。

最新更新