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:migrate
来rake db:drop db:create db:migrate
重新生成模式。 这种方式从其他分支迁移不会泄漏到您的模式文件,并稍后给你头痛 – 如果你切换分支很多。