Ruby on rails 无序合并ActiveRecord迁移
假设我在我的Ruby on rails 无序合并ActiveRecord迁移,ruby-on-rails,git,activerecord,rails-migrations,Ruby On Rails,Git,Activerecord,Rails Migrations,假设我在我的Rails应用程序的git中工作,我有两个分支,每个分支都有自己的迁移 1) branch001通过迁移创建名为tableA的表20160101000000\u create\u table\u a 2) branch002通过迁移创建名为tableB的表20160101000001\u create\u table\u B 显然,第二次迁移的时间戳是在第一次迁移之后创建的 但假设我首先将branch002合并到master,因为它首先准备好了。我的模式文件变为- ActiveRec
Rails
应用程序的git
中工作,我有两个分支,每个分支都有自己的迁移
1) branch001
通过迁移创建名为tableA
的表20160101000000\u create\u table\u a
2) branch002
通过迁移创建名为tableB
的表20160101000001\u create\u table\u B
显然,第二次迁移的时间戳是在第一次迁移之后创建的
但假设我首先将branch002
合并到master
,因为它首先准备好了。我的模式文件变为-
ActiveRecord::Schema.define(version: 20160101000001) do
....
end
模式版本告诉activerecord它已经修补到比我的第一个分支更高的级别/版本
当我最终着手合并我的第一个分支时会发生什么
20160101000000
master
中时,应该如何解决合并冲突。我应该将其保留为后面的时间戳还是将其回归到前面的时间戳
<<<<<<< HEAD (master)
ActiveRecord::Schema.define(version: 20160101000001) do
=======
ActiveRecord::Schema.define(version: 20160101000000) do
>>>>>>> 282cda7... Adding Table B
>282cda7。。。添加表B
如果发生冲突,您应该从两个选项中选择较大的一个。但无论您选择什么,它对实际迁移都没有影响
如果您选择较低的数字,那么下次运行rake db:migrate
时,它将更改此数字(为较高的数字),并且您的schema.rb中将有一个更改,并且不会进行迁移。这不是一个问题-只是你的提交会有点奇怪
Rails rake任务运行它找到的并且在schema\u migrations
表中没有值的所有迁移。然后它获取最高的迁移时间戳,并将该时间戳放入schema.rb
。整个迁移思想不是基于某个“最近的时间戳”(模式版本),而是基于schema\u migrations
表的内容,该表包含它已经运行的所有迁移时间戳。因此,通过这个表,它保证不会跳过任何迁移。非常简短的版本是,事情通常都很好:假设迁移不会相互干扰(例如一个删除了一个表,但另一个假设它仍然存在),您不应该遇到麻烦
虽然您的架构文件中只有一个版本号,但在运行迁移时,rails会将迁移文件列表与schema\u migrations
表的内容进行比较,并运行所有尚未运行的迁移,即使最近已经运行了迁移
至于模式冲突,我个人只会运行迁移,这将重新生成schema.rb