繁体   English   中英

如何跨git分支管理对数据库的更改?

[英]How do I manage changes to my db across git branches?

因此,我有一个正在尝试的应用程序。

我的develop分支当前状态良好。 我想安装狂欢,但是要附带很多迁移和对数据库的更改。

所以我根据我的develop分支为Spree新建了一个分支。

我安装了gem,运行了迁移程序以及所有这些东西。

但是,我弄乱了一些东西,因此我想恢复到我的develop分支并删除了spree分支。

我假设我的schema.rb将恢复正常,我的数据库也将恢复。

但是随后,我在Schema.rb看到了很多Spree表。

不仅如此,我还可以在Schema.rb中看到其他表,这些表我知道我已经为spree分支创建了迁移并将其“删除”。

因此,例如,我在Schema.rb中有一个orders表,该表我应该删除。 有点困惑,我决定创建一个新迁移,以在安装spree之前删除orders表以及我删除的其他表,并且出现PG错误,提示该表不存在。

所以....现在看来,我的schema.rb和数据库没有同步。

更糟糕的是,我的schema.rb和我的db/migrate文件夹未同步。

我打算在schema.rb中手动删除不应该存在的表中的create_table语句-但这真是一团糟。

我如何从这个洞中挖出自己,以及将来如何预防它?

综上所述

D B

狂欢前状态

  • 表A
  • 表B
  • 表C

狂欢状态

  • 表A(已删除)
  • 表B(已删除)
  • 表C
  • Spree_Table_A
  • Spree_Table_B

狂欢后状态

  • 表A(已删除)
  • 表B(已删除)
  • 表C
  • Spree_Table_A
  • Spree_Table_B

基本上与狂欢状态相同

数据库/迁移文件夹

狂欢前状态

  • 迁移表A
  • 表B的迁移
  • 迁移表C

狂欢状态

  • 迁移以删除表A
  • 迁移以删除表B
  • 迁移表C
  • 迁移Spree_Table_A
  • 迁移Spree_Table_B

狂欢后状态

  • 迁移表A
  • 表B的迁移
  • 迁移表C

请注意,“狂欢后状态”的迁移不会与“狂欢后状态”的数据库状态同步。

由于它变得很冗长,所以将注释转换为答案:

为任何新分支都拥有一个单独的数据库是更安全的,即使这只是开发数据库的快照。 您将需要从spree分支还原迁移(如果可能),并对其进行向下运行,以使数据库恢复到原来的位置。

rake db:migrate VERSION=xxx 

其中xxx等于狂欢前最后一次迁移的次数

我不是git专家,但是如果您的分支是通过git删除的,那么此线程可以帮助您恢复它。 如果您仅在本地将其删除,则应该可以再次将其检出。

Git:恢复已删除(远程)分支

当您切换回develop分支时,git应该签出原始的schema.rb (如果没有发生,我认为您应该重新检查您正在使用的git命令)。 但是,它不会自动将数据库恢复为创建spree

如果您不再具有将数据库状态恢复为与要从git中检出的提交相对应的数据库状态所需的迁移文件,则应使用rake db:reset使其匹配。 这将转储数据库的当前状态,并使用schema.rb重建它(然后应用适当的种子文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM