Управление конфликтом в schema.rb, созданном операцией Git
Я создал миграцию, запустил rake db:migrate
, что привело 9X_migration к увеличению номера моей версии db / schema.rb. Затем 9X_git-commands я сделал git fetch origin master
и увидел, что члены моей команды 9X_ror внесли изменения. Итак, я сделал git stash
и git rebase FETCH_HEAD
, за 9X_ruby-on-rails которыми следовал git stash pop
. Это привело к конфликту 9X_migrations в db / schema.rb из-за номера версии.
Upstream>>> ActiveRecord::Schema.define(:version => 20110930179257) do =========== ActiveRecord::Schema.define(:version => 20110930161932) do <<
Я думаю, что 9X_rails подходящим исправлением было бы вручную 9X_ruby-on-rails увеличить номер версии до значения, превышающего 9X_ror исходный.
Это разумная новость или плохая 9X_ruby-on-rails новость?
Спасибо, Макс
- Чтобы ответить на мой собственный вопрос, увеличивать но ...
Ответ #1
Ответ на вопрос: Управление конфликтом в schema.rb, созданном операцией Git
Если ваша текущая база данных имеет правильную 9X_ruby-on-rails схему, вам следует:
-
Запустить отложенные 9X_git миграции (если есть)
rake db:migrate
-
Перезаписать
schema.rb
из текущей 9X_migration схемы базы данныхrake db:schema:dump
-
И зафиксировать
- Разве это не приведет к созданию запроса на перенос без изменения версии в schema.rb, если версия удаленн ...
Ответ #2
Ответ на вопрос: Управление конфликтом в schema.rb, созданном операцией Git
Когда я сталкиваюсь с этим конфликтом, я 9X_git просто переношу базу данных. Независимо 9X_git от того, есть ли незавершенные миграции 9X_migration или нет, конфликт будет исправлен.
Ответ #3
Ответ на вопрос: Управление конфликтом в schema.rb, созданном операцией Git
tldr
Примите исходную версию и запустите rake db:migrate
, как 9X_git обычно.
Почему именно так?
Не беспокойтесь о созданных вами 9X_ruby-on-rails миграциях (которые ниже исходной версии 9X_git 20110930179257
). ActiveRecord использует таблицу schema_migrations
, куда 9X_git помещает все выполненные миграции. Если 9X_migration ваших миграций нет в списке, но они находятся 9X_git-commands в каталоге db/migrate
, ActiveRecord запустит их.
Вот 9X_git-commands таблица, чтобы вы могли лучше ее визуализировать:
Заманчиво 9X_migrations думать, что это на самом деле такая строка: ActiveRecord::Schema.define(:version => 20110930179257)
который 9X_ruby-on-rails определяет последний запуск миграции, поэтому 9X_git-commands никакие миграции с версией ниже не будут 9X_git выполняться. К счастью, это не так. Rails 9X_git выполнит любые миграции, которые находятся 9X_rails в папке db/migrate
и еще не находятся в таблице schema_migrations
.
Ответ #4
Ответ на вопрос: Управление конфликтом в schema.rb, созданном операцией Git
Согласно this answer, конфликт гарантирован. Пользователь 9X_ruby-on-rails должен вручную объединить и установить версию 9X_migration как более высокую из двух.
Ответ #5
Ответ на вопрос: Управление конфликтом в schema.rb, созданном операцией Git
Вот что я делаю, когда слияние мастера с 9X_migrations моей функциональной веткой дает сбой из-за 9X_rails конфликтов в 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
Ответ #6
Ответ на вопрос: Управление конфликтом в schema.rb, созданном операцией Git
~/bin/update-schema-rb
:
#!/usr/bin/env bash git co master bin/rake db:reset db:seed git co - bin/rake db:migrate
9X_ruby-on-rails
-
7
-
5
-
5
-
5
-
6
-
11
-
1
-
10
-
14
-
4
-
4
-
27
-
5
-
4
-
11
-
5
-
3
-
1
-
1
-
1
-
20
-
3
-
7
-
5
-
5
-
3
-
9
-
5
-
8
-
5
-
4
-
6
-
5
-
8
-
1
-
4
-
6
-
2
-
1
-
2
-
4
-
6
-
3
-
4
-
3
-
4
-
5
-
6
-
2
-
2