有没有办法让git在rails中自动合并架构更改?

时间:2017-02-03 18:50:22

标签: ruby-on-rails git

每当我的repo中的其他人更改与数据库相关的内容时,如果我也进行与数据库相关的更改,则Schema版本显然会发生冲突。有没有办法配置git在ActiveRecord::Schema.define中自动使用最新版本的方案,还是我需要总是手动执行这些合并冲突?

1 个答案:

答案 0 :(得分:-1)

我认为你以错误的方式看待这个问题。如果schema.rb(或structure.sql)中存在冲突,那么您的数据库可能不再与您的代码和迁移保持一致。这种不一致是真正的问题,并试图通过摆弄 git 来忽略它而不会解决问题,但它可能会隐藏它。

如果您合并某些代码并最终导致schema.rb中的冲突,那么您可能会遇到新的迁移,或者有人正在做一些狡猾的事情;在后一种情况下,你有一个必须通过人类手段解决的人类问题。但是,如果有新的迁移,那么您应该能够rake db:migrate运行它们并获得一个全新的无冲突schema.rb,您可以提交以解决冲突并完成合并。如果一个简单的rake db:migrate没有解决问题,那么您的新迁移正在与您尝试合并的迁移进行斗争, git 在这里无法获得帮助,你必须手工解决这个冲突(即在迁移之间实现和平),以便rake db:migrate解决你的问题。

如果schema.rb中存在冲突,但它与迁移无关(这应该很少见,但如果您使用structure.sql则少见),那么简单rake db:schema:dump(或rake db:structure:dump)应该给你一个干净的schema.rb提交。

执行摘要:

  1. schema.rb冲突表明其他地方的冲突 git 无法修复。
  2. 人类解决人类问题。
  3. 程序员(大部分也是人类)修复了迁移冲突和修复schema.rb冲突的问题。
  4. 如果所有其他方法都失败了,rake db:schema:dump新的schema.rb并通过合并进行提交。
  5. schema.rb离开您的存储库is not a solution