每当我的存储库中的其他人更改了与数据库相关的内容时,如果我也更改了与数据库相关的内容,那么Schema版本显然会发生冲突。有没有办法将git配置为在ActiveRecord::Schema.define中自动使用最新版本的方案,或者我需要总是手动处理这些合并冲突?
发布于 2017-02-04 03:51:47
我觉得你看错了。如果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并使用提交。将schema.rb留在您的存储库is not a solution之外。
https://stackoverflow.com/questions/42031103
复制相似问题