如何在Git分支之间维护数据库表字段的最佳方法?

3
我正在使用Django和Postgresql开发Web服务。
假设我们有3~4个分支,用于不同的功能或旧版本的bug修复目的。
然后,我遇到了一个问题,当我在A分支中更改Django模型并运行迁移以更改本地测试桌面上的数据库时。
当我切换到另一个没有迁移文件的分支时,数据库将不一致,并且当我尝试运行Django时无法工作,我必须删除数据库并重新创建它。
通常情况下,如何处理这种对开发环境的需求是最好/常见的方式?
4个回答

3
我理解您的情况并多次遇到同样的问题。
以下是我的做法:
  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. 当我再次切换回之前的任务时,我只需执行迁移并继续进行。

通过这种方法,我不需要删除所有表格或还原旧数据库等操作。
作为新手,我非常乐意听取您的想法。

哦!我忘记了这种方式,所以我们必须在切换分支之前迁移到旧的迁移,对吧? - codebrew
是的,您可以回滚任何迁移。https://dev59.com/2FwY5IYBdhLWcg3w36-G - Umair Mohammad
1
数据库中存储的虚拟数据怎么办?如果回滚,那不就丢失了吗?手动备份太麻烦了。 - Aagam Sheth

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

我同意这个答案。我认为问题应该更广泛地看待。使用Git-Flow策略(为每个功能保留单独的分支并定期将它们合并到“master”分支)是一种常见的做法。请查看“基于主干”的开发策略https://trunkbaseddevelopment.com/,您将减少分支之间的相互依赖问题。 - Pavel Minenkov
2
不要这样做。删除迁移通常是一个坏主意。 - Daniel Roseman
1
这在我的情况下可能会遇到另一个问题,当其他开发人员尝试拉取我完成上述步骤的迁移文件时,它们将与他们的迁移文件冲突,并且必须再次删除数据库。如果更改模型非常频繁,这是一个好方法吗? 目前困扰我的是我需要不时地删除数据库。 - codebrew

1
在每个分支中运行不同的测试数据库。
当你fork设计时,fork数据库。
克隆数据库并迁移它。

0

在推送到git时,确保包括您的迁移,这样当其他人拉取该分支并运行 migrate 命令时,django会知道对数据库做了哪些更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接