【问题标题】:Is it a good idea to put db/schema.rb to .gitignore list ?? [closed]将 db/schema.rb 放到 .gitignore 列表中是个好主意吗? [关闭]
【发布时间】:2011-09-25 02:08:15
【问题描述】:

所以我在工作中的建议是将 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 中?

谢谢你

【问题讨论】:

标签: ruby-on-rails git migration gitignore


【解决方案1】:

您应该在 VCS 中放入重现操作环境所需的任何东西。
如果为了重建您的应用程序,您需要拥有正确的schema.rb(在正确的版本上),那么可以,它可以被版本化。

但是,如果您可以通过另一个进程将其取回,那么最好通过其他引用而不是 VCS 来备份它。

【讨论】:

  • 好的,为了不把它放到 .gitignore 中的好处而采取的论点 :)
  • @equivalent:是的,这就是为什么我赞成Martijn's answer,其中包括需要schema.rb 的实际情况。
  • schema.rb 文件包含以下文本:“强烈建议将此文件签入您的版本控制系统。”
【解决方案2】:

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

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

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

【讨论】:

  • 是的,我说的是 git (VSC) 冲突,你发布的链接确实是个好主意,我会考虑那个(+1)
【解决方案3】:

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

  1. rake db:migrate:down VERSION=xxx 前一段时间创建的迁移,但未合并到其他分支
  2. git checkout branch
  3. rake db:migrate 迁移所有新创建的分支

我在以前的项目中遇到了一些问题,其中 schema.rb 位于 .gitignore 中。每次我看到有问题时,我都必须删除数据库并从迁移中重新创建,而使用 schema.rb 我可以在几分之一秒内加载架构,然后 rake db:seed 加载数据。但这并不重要。

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

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2013-06-17
    • 1970-01-01
    • 2019-05-15
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2018-08-17
    相关资源
    最近更新 更多