将db / schema.rb放到.gitignore列表中是个好主意吗?

时间:2011-06-29 11:37:50

标签: ruby-on-rails git migration gitignore

所以我在工作中建议的是将db / schema.rb放入.gitignore文件中,这样我们就没有(不时)合并问题。

有一些担心,如果发生了可怕的事情(流星在数据库服务器上从天而降,同时所有db / migrete文件都已损坏),我们可能会松开架构,我们将不得不使用rake db:purge (重用schema.rb)。我同意这是可能的,这是一个很好的论据,但它不应该是问题,因为每次我们执行rake db:migrate时都会生成db / schema.rb。因此,即使我们不在服务器上推送schema.rb,我们也在推动迁移添加运行db:migrate每次我们使用数据库更改进行部署时,db:migrate rails将在服务器端自动生成schema.rb,并且schema.rb在服务器上保持不变,直到我们执行另一个db:migrate。

那么你的意见是什么,我们是否应该将db / schema.rb放入git ignore?

谢谢

3 个答案:

答案 0 :(得分:31)

我总是建议将schema.rb保留在版本控制中,因为像rake db:schema:load这样的任务取决于它在那里。

关于冲突,您在谈论架构版本冲突吗?使用此处显示的合并算法可以轻松减轻这些问题:http://tbaggery.com/2010/10/24/reduce-your-rails-schema-conflicts.html

通过小心您对存储库的提交,可以轻松避免其他冲突,例如列定义切换位置。

答案 1 :(得分:4)

您应该为VCS提供重现操作环境所需的一切 如果为了重建您的应用程序,您需要拥有正确的schema.rb(在正确的版本中),然后是,它可以进行版本控制。

但是如果你可以通过另一个进程获得它,那么最好通过其他参考而不是VCS来备份。

答案 2 :(得分:4)

当您在开发不同模型属性集的功能分支之间切换时,如果没有schema.rb,您有时需要:

  1. rake db:migrate:down VERSION=xxx一段时间前创建的迁移,但未与其他分支合并
  2. git checkout branch
  3. rake db:migrate迁移所有新创建的分支
  4. 我在以前的项目中遇到了一些问题,其中schema.rb在.gitignore中。每当我看到错误的时候,我就不得不删除数据库并从迁移中重新创建,而使用schema.rb我可以在几分之一的时间内加载模式,然后加载rake db:seed来加载数据。但这并不重要。

    我也很好奇你在使用schema.rb时遇到了什么问题?大多数情况下,您可以使用rake db:dump覆盖此文件而不必担心更改(我假设您没有手动修改数据库结构),只需将其添加为合并解析。