use*_*003 14 git activerecord ruby-on-rails rails-migrations
假设我正在git
使用我的Rails
应用程序,我有两个分支,每个分支都有自己的迁移.
1)branch001
创建一个名为tableA
via migration 的表20160101000000_create_table_A
2)branch002
创建一个名为tableB
via migration 的表20160101000001_create_table_B
显然,第二次迁移的时间戳是在第一次迁移之后创建的.
但是,让我说我首先合并branch002
,master
因为它已经准备好了.我的架构文件变成 -
ActiveRecord::Schema.define(version: 20160101000001) do
....
end
Run Code Online (Sandbox Code Playgroud)
模式版本告诉activerecord它已经修补到比我的第一个分支更大的级别/版本.
当我终于合并我的第一个分支时会发生什么?
20160101000000
吗?谢谢!
编辑 -
真的想知道当我合并第二个分支时我应该怎么做才能解决合并冲突master
.我应该将其作为较晚的时间戳保留还是将其退回到较早的时间戳?
<<<<<<< HEAD (master)
ActiveRecord::Schema.define(version: 20160101000001) do
=======
ActiveRecord::Schema.define(version: 20160101000000) do
>>>>>>> 282cda7... Adding Table B
Run Code Online (Sandbox Code Playgroud)
Rad*_*sky 24
如果发生冲突,您应该选择两者中较高的数字.但无论你选择什么,它对实际的迁移都没有影响.
如果您选择较低的数字,那么下次运行rake db:migrate
它将更改此数字(更高的数字),您和您的schema.rb
迁移都将发生变化.这不是问题 - 只有你的提交会有点奇怪.
Rails rake任务运行它找到的所有迁移,并且在schema_migrations
表中没有值.然后它需要最高的迁移时间戳并将此时间戳放入schema.rb
.整个迁移的想法不是基于某些"最新的时间戳"(架构版本),而是基于schema_migrations
包含已经运行的所有迁移时间戳的表的内容.因此,通过此表可确保不会跳过任何迁移.
非常简短的版本是事情通常很好:假设迁移不会相互干扰(例如,一个删除一个表但另一个假设它仍然存在),你不应该遇到麻烦.
虽然您的模式文件中包含单个版本号,但当您运行迁移时,rails会将迁移文件列表与schema_migrations
表的内容进行比较,并运行尚未运行的任何迁移,即使最近的迁移已经存在已经运行了.
至于架构冲突,我个人只会运行迁移,这将重新生成schema.rb.
归档时间: |
|
查看次数: |
1582 次 |
最近记录: |