【问题标题】:Branching git, running migrations, and keeping the schema functional分支 git、运行迁移并保持模式正常运行
【发布时间】:2012-02-03 02:50:29
【问题描述】:

我对 git 还很陌生,我已经开始使用多个分支来同时使用 git branchgit checkout 等命令构建不同的功能。

这是我已采取的步骤列表:

git checkout feature1
make some changes that include migrations
rake db:migrate
rake db:commit to feature1 with schema.rb

git checkout feature2
# at this point my schema appears to revert to pre-feature1
make some changes that involve a new migration
rake db:migrate
# schema now shows changes from BOTH feature1 and feature2.

在 feature2 中运行 rake db:migrate 的行为刷新了架构,我想这反映了我支持 feature1 和 feature2 的本地数据库。您知道我可以做些什么来使这些迁移分开,以便每个功能都可以有自己的架构,还是有其他方法来处理分支迁移?

【问题讨论】:

    标签: ruby-on-rails git migration git-branch database-migration


    【解决方案1】:

    想想你的工作流程。在 feature1 分支中有来自 feature1 的 schema.rb 但如果您使用 sqlite,您的数据库已在 feature2 分支中更新。如果您在 feature2 中进行了更改,这会破坏您在 feature1 中的应用程序,您必须为 feature1 重建您的数据库。

    如果您不想重建数据库,则必须先配置您的 rails 应用程序以使用不同的数据库,然后再在 feature2 分支中运行迁移。

    edit:另一种可能性是将您的数据库添加到 git(通过更改 .gitignore 文件并将其添加到存储库)。然后你可以用 git 恢复你的数据库。

    【讨论】:

    • 这不是“破坏我的应用程序” - 在 feature2 中运行 rake db:migrate 之后,它只运行一个迁移,但架构正在更新以显示所有四个迁移。我想发生的事情是每次签出新分支时我的数据库都没有更改为不同的迁移状态。
    • 在 feature2 中运行 rake db:migrate 后,即使您之后签出 feature1 分支,您的数据库也处于 feature2 的迁移版本。
    • 对...所以我的问题是如何最有效地处理这个问题。为开发中的每个功能重新配置/重建新数据库似乎非常繁重。
    • 我想我会复制 sqlite 数据库并更改新分支中的配置以使用复制的数据库。
    • 保持一个带有干净数据库的主干可能更容易,该数据库在分支时被复制到每个功能分支中(仍然在修订控制之外)。我不是 SCM 修改数据库的忠实拥护者,除非您打算以这种方式部署它。
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2011-01-04
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多