每当我的repo中的其他人更改与数据库相关的内容时,如果我也进行与数据库相关的更改,则Schema版本显然会发生冲突。有没有办法配置git在ActiveRecord::Schema.define
中自动使用最新版本的方案,还是我需要总是手动执行这些合并冲突?
答案 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
提交。
执行摘要:
schema.rb
冲突表明其他地方的冲突 git 无法修复。schema.rb
冲突的问题。rake db:schema:dump
新的schema.rb
并通过合并进行提交。让schema.rb
离开您的存储库is not a solution。