[英]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
狂欢前状态
狂欢状态
狂欢后状态
基本上与狂欢状态相同
数据库/迁移文件夹
狂欢前状态
狂欢状态
狂欢后状态
请注意,“狂欢后状态”的迁移不会与“狂欢后状态”的数据库状态同步。
由于它变得很冗长,所以将注释转换为答案:
为任何新分支都拥有一个单独的数据库是更安全的,即使这只是开发数据库的快照。 您将需要从spree分支还原迁移(如果可能),并对其进行向下运行,以使数据库恢复到原来的位置。
rake db:migrate VERSION=xxx
其中xxx
等于狂欢前最后一次迁移的次数
我不是git专家,但是如果您的分支是通过git删除的,那么此线程可以帮助您恢复它。 如果您仅在本地将其删除,则应该可以再次将其检出。
当您切换回develop
分支时,git应该签出原始的schema.rb
(如果没有发生,我认为您应该重新检查您正在使用的git命令)。 但是,它不会自动将数据库恢复为创建spree
。
如果您不再具有将数据库状态恢复为与要从git中检出的提交相对应的数据库状态所需的迁移文件,则应使用rake db:reset
使其匹配。 这将转储数据库的当前状态,并使用schema.rb
重建它(然后应用适当的种子文件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.