所以有2个相关的分支。通知和shipping_options。
我从master
中签出了notifications
,然后进行了 2 项重要的数据库更改:
- 创建
GeneralNotice
模型 - 通过添加布尔
dismissed
修改了现有Notice
模型
然后shipping_options
也以与 notifications
相同的状态从 master 中签出,并且没有进行任何数据库更改,只有少量的代码更改。
我第一次从notifications
切换到shipping_options
rake db:migrate
运行,反之亦然。
目前,当我在 notifications
中并运行rails c
时,我得到以下内容:
2.0.0-p451 :001 > Notice
=> Notice(id: integer, title: string, description: text, created_at: datetime, updated_at: datetime, kind: string, general_notice_id: integer, shop_id: integer, dismissed: boolean)
2.0.0-p451 :002 > GeneralNotice
=> GeneralNotice(id: integer, title: string, description: text, created_at: datetime, updated_at: datetime)
2.0.0-p451 :003 >
- 通知已
dismissed
(如预期) - 一般通知存在(如预期的那样)
然后我切换到shipping_options
,我希望你一直在关注,因为这是令人困惑的部分......
2.0.0-p451 :001 > Notice
=> Notice(id: integer, title: string, description: text, created_at: datetime, updated_at: datetime, kind: string, general_notice_id: integer, shop_id: integer, dismissed: boolean)
2.0.0-p451 :002 > GeneralNotice
NameError: uninitialized constant GeneralNotice
from (irb):2
from /Users/marcoprins/.rvm/gems/ruby-2.0.0-p451/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /Users/marcoprins/.rvm/gems/ruby-2.0.0-p451/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /Users/marcoprins/.rvm/gems/ruby-2.0.0-p451/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
2.0.0-p451 :003 >
-
GeneralNotice
不存在,所以显然 git 通过根据我的分支更改数据库来非常好且有帮助 -
Notice
仍然有一个布尔dismissed
...咦????git 好不好??帮助!!!!!!
-
由于已在第一个分支(通知)中运行迁移,因此该列已添加到数据库表中,因此它将显示您是否进行检查。 inspect 方法直接与数据库表一起使用,反映列(属性)。
-
GeneralNotice:如果您检查数据库,它将包含表 (general_notices),但由于定义 GeneralNote 的文件 general_notice.rb 不在此分支中存在,因此它会抛出未初始化的常量错误。
看看这个和这个,了解一些将数据库置于版本控制之下的想法。
每当切换分支时,分支可能包含一组不同的迁移,明智的做法是运行从schema.rb
文件重新加载数据库架构的rake db:reset
。
为了确保您的schema.rb
在所有分支中都是最新的,最好在将分支与新迁移合并时运行rake db:migrate:reset
。此 rake 任务从一开始就运行您的所有迁移,并将生成的数据库方案写入文件。