【问题标题】:What's best approach to maintain database table field between git branch?在 git 分支之间维护数据库表字段的最佳方法是什么?
【发布时间】:2019-01-03 02:29:10
【问题描述】:

我正在使用 Django 和 Postgresql 开发 Web 服务。

假设我们有 3~4 个分支,用于不同的功能或旧版本的错误修复目的。

然后,我在分支 A 并更改 django 模型时遇到了一个问题,并在我的本地测试桌面上运行 migrate to change database。

当我切换到另一个没有迁移文件的分支时,当我尝试运行django时,数据库会不一致并且无法工作,我必须删除数据库并重新创建它。

一般来说,处理这种对开发人员环境的需求的最佳/常用方法是什么?

【问题讨论】:

    标签: django git postgresql


    【解决方案1】:

    我很了解您的情况,并且多次遇到过同样的情况。

    这是我喜欢的(/做):

    1. 我在分支bug-fix/surname_degrade 我更改了用户数据模型 [生成了user_migration_005],然后迁移了数据库。 然后我的老板过来指出,由于登录降级,用户无法登录。

    2. 所以我必须先切换分支并修复它。

    3. 我可以回滚迁移[user_migration_005],我刚才已经完成了。像这样python manage.py migrate user_migration_004

    4. 切换分支并开始处理hot-fix/login_degrade

    5. 当我切换回之前的任务时,我可以进行迁移并继续。

    通过这个过程,我不需要删除我的所有表或恢复旧数据库或类似的东西。

    我是新手,很高兴听到你的想法。

    【讨论】:

    • 哦!我忘记了这种方式,所以我们必须在切换分支之前迁移到旧迁移,对吧?
    • 是的,您可以回滚任何迁移。 stackoverflow.com/questions/32123477/…
    • 数据库中存储的虚拟数据呢?如果回滚会不会丢失?手动备份很烦人。
    【解决方案2】:

    这里的主要问题是,每次迁移时,您的数据库都会发生变化,因此您要么保持不同分支之间的数据库一致性,要么您可以在使用/测试时做一件事(在声明所有模型之后)
    1)删除所有数据库表(如果你有备份或虚拟数据
    2) 删除分支中所有现有的迁移文件
    3) 创建新的迁移
    4) 迁移到新的迁移
    如果重新修改模型也可以执行上述步骤,修改后只需重复步骤即可。

    【讨论】:

    • 我同意这个答案。我会看到更广泛的问题。使用 Git-Flow 策略是一种习惯做法(为每个功能保留单独的分支,并定期将它们合并到master)。看trunk based制定策略trunkbaseddevelopment.com你会减少分支之间的一致性问题
    • 不要这样做。删除迁移通常是个坏主意。
    • 在我的情况下可能会遇到另一个问题,当其他开发人员尝试提取我已完成上述步骤的迁移文件时,他们将与他们的迁移冲突,并且必须再次删除数据库。如果更换模型非常频繁,这也是一个好方法吗?目前困扰我的是不时需要删除数据库。
    【解决方案3】:

    在每个分支中运行不同的测试数据库。

    fork 设计时,fork 数据库

    克隆数据库并迁移它。

    【讨论】:

      【解决方案4】:

      确保当你推送到 git 时,包括你的迁移,等待其他人拉出分支并执行 migrate django 知道对数据库进行了哪些更改。

      【讨论】:

        猜你喜欢
        • 2018-05-09
        • 2014-10-13
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2013-09-17
        • 2010-10-05
        • 2010-09-24
        • 1970-01-01
        相关资源
        最近更新 更多