pipe理由Git操作创build的schema.rb中的冲突

我创build了一个迁移,运行rake db:migrate ,它碰到了我的db / schema.rb版本号。 然后我做了一个git fetch origin master ,看到我的团队成员发生了变化。 所以我做了一个git stash和一个git rebase FETCH_HEAD ,接着是一个git stash pop 。 这导致版本号上的db / schema.rb发生冲突。

 Upstream>>> ActiveRecord::Schema.define(:version => 20110930179257) do =========== ActiveRecord::Schema.define(:version => 20110930161932) do <<<Stashed 

我认为适当的修复方法是手动将版本号增加到高于上游的值。

这是明智的还是坏消息?

谢谢,马克斯

如果您当前的数据库具有正确的模式,则应该:

  • 运行挂起的迁移(如果有的话)

     rake db:migrate 
  • 用你当前的数据库模式覆盖你的schema.rb

     rake db:schema:dump 
  • 并承诺

当我发现自己与这个冲突,我只是迁移数据库。 是否有未决的迁移,冲突将被纠正。

根据这个答案 ,冲突得到保证。 用户必须手动合并,并将版本设置为两者中的较高者。

下面是我做什么时,合并主到我的function分支失败在db / schema.rb冲突:

 $ git merge --abort $ git checkout master $ rake db:drop db:create db:migrate $ git checkout -- db/schema.rb $ git checkout my_feature_branch $ rake db:migrate $ git add db/schema.rb $ git commit -m 'Updated schema' $ git merge master 

~/bin/update-schema-rb

 #!/usr/bin/env bash git co master bin/rake db:reset db:seed git co - bin/rake db:migrate 

一个选项是有一个手动版本脚本,只是添加剂。 你想要冲突 架构是一种会咬你很难的东西,如果你不坚持。 因此,一旦被咬,两次害羞,我不介意保持模式和查找信息(客户types列表)与添加剂只改变pipe理scheme。

我觉得最好的办法是做rake db:drop db:create db:migrate使用只存在于当前分支的rake db:drop db:create db:migraterake db:drop db:create db:migrate重新生成模式。 这种方式从其他分支迁移不会泄漏到您的模式文件,并稍后给你头痛 – 如果你切换分支很多。