1

所以,我有一个我正在试验的应用程序。

develop我的分支目前的状态很好。我想安装 spree,但这会带来许多迁移和对 db 的更改。

所以我基于我的develop分支创建了一个新的分支,只为 Spree。

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

但是,我搞砸了一些东西,所以我想恢复到我的develop分支并删除了该spree分支。

我认为我schema.rb会恢复正常,我的数据库也会恢复正常。

但后来我查看了我的Schema.rb,我看到了很多 Spree 表。

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

因此,例如,我有一张我知道应该删除的orders表。Schema.rb有点困惑,我决定创建一个新的迁移来删除该orders表以及我在安装 spree 之前删除的其他表,我收到一个 PG 错误,说该表不存在。

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

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

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

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

总之

D B

预狂欢状态

  • 表 A
  • 表 B
  • 表 C

狂欢状态

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

狂欢后状态

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

与Spree State基本相同

数据库/迁移文件夹

预狂欢状态

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

狂欢状态

  • 迁移到删除表 A
  • 迁移到删除表 B
  • 表 C 的迁移
  • Spree_Table_A 的迁移
  • Spree_Table_B 的迁移

狂欢后状态

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

请注意,“Post-Spree State”的迁移不会与“Post-Spree State”的数据库状态同步。

4

2 回答 2

1

将评论转换为答案,因为它变得很长:

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

rake db:migrate VERSION=xxx 

wherexxx等于 spree 前最后一次迁移的次数

我不是 git 专家,但如果你的分支是通过 git 删除的,那么这个线程可能会帮助你恢复它。如果您只是在本地删除它,那么您应该能够再次检查它。

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

于 2013-05-28T08:30:12.403 回答
1

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

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

于 2015-02-05T14:20:46.767 回答