您如何在非主分支上干净地维护 django 迁移?

Posted

技术标签:

【中文标题】您如何在非主分支上干净地维护 django 迁移?【英文标题】:How do you cleanly maintain django migrations on non-master branch? 【发布时间】:2018-09-13 00:14:25 【问题描述】:
    想象一下,我有一个进行迁移的分支。这是一个与 master 保持同步的实验性分支,但暂时不会合并到其中,如果有的话。 主迁移随时间而变化。 结果是当我在master中合并时,我最终得到了多个迁移叶子,这意味着manage.py迁移错误。如果我只做manage.py makemigrations --merge,那么它会创建一个新的叶子,稍后也会过时。

有没有好的方法来处理这个问题?我很想避免在长期依赖的分支中进行任何迁移。

【问题讨论】:

我认为2个选项:不要在非主分支中跟踪您的新迁移或其修改,并且仅在分支合并到主分支后生成主迁移。或者在更新分支之前将 master 迁移合并到您的分支中,然后提交并将分支合并回 master。 【参考方案1】:
    在合并之前在 master 之上重新建立一个实验分支。

    从实验分支取消应用所有迁移:

    manage.py migrate <appname> <previousMigration> 
    

    从实验分支中删除所有迁移。

    创建一个全新的迁移:

    manage.py makemigrations
    

    将更改提交到实验分支

    合并实验分支。

如果没有其他人应用迁移,从存储库中删除迁移是完全安全的。

【讨论】:

虽然很有帮助,但重要的是要注意,这只有在迁移的所有内容都是自动生成的情况下才有效。如果您的实验分支上的任何迁移包含 - 例如 - migrations.RunPython 操作,它们将不会被重新创建。

以上是关于您如何在非主分支上干净地维护 django 迁移?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JPA 和 Hibernate 在非主键上连接表

如何干净地切换到一个分支

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

将 Django South 与多个代码分支一起使用的工作流程

使用 IN vs = 运算符时在非主键列上使用聚集索引

在非主线程里面使用NSTimer创建和取消定时任务