Подтвердить что ты не робот

Управление конфликтом в schema.rb, созданное с помощью операции Git

Я создал миграцию, запустил rake db:migrate, что натолкнуло мой номер версии db/schema.rb. Затем я сделал git fetch origin master и увидел, что произошли изменения от членов моей команды. Поэтому я сделал git stash и a git rebase FETCH_HEAD, а затем git stash pop. Это привело к конфликту в db/schema.rb над номером версии.

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

Я думаю, что подходящее исправление будет заключаться в том, чтобы вручную увеличить номер версии до чего-то большего, чем восходящий.

Это разумные или плохие новости?

Спасибо, Макс

4b9b3361

Ответ 1

Если ваша текущая база данных имеет правильную схему, вы должны:

  • Выполнить ожидающие миграции (если есть)

    rake db:migrate
    
  • Перезапишите свой schema.rb из текущей схемы базы данных

    rake db:schema:dump
    
  • И зафиксировать

Ответ 2

Когда я сталкиваюсь с этим конфликтом, я просто переношу базу данных. Будут ли ожидающие миграции или нет, конфликт будет исправлен.

Ответ 3

В соответствии с этим ответом конфликт гарантирован. Пользователь должен вручную объединить и установить версию как более высокую из двух.

Ответ 4

Здесь то, что я делаю при слиянии мастера с моей веткой признаков, терпит неудачу в конфликтах в 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

Ответ 5

~/bin/update-schema-rb:

#!/usr/bin/env bash

git co master
bin/rake db:reset db:seed
git co -
bin/rake db:migrate

Ответ 6

Опция состоит в том, чтобы иметь версию с ручным управлением script, которая является только аддитивной. Там вам нужны конфликты. Схема - это то, что вас укусит, если вы не останетесь на вершине. Так что однажды укушенный, дважды застенчивый, я не против держать информацию о схеме и поиске (список типов клиентов) с помощью схемы управления изменениями только с добавкой.

Ответ 7

Я считаю, что лучший способ - сделать rake db:drop db:create db:migrate для восстановления схемы с использованием миграций, которые существуют только в текущей ветке. Таким образом, миграция из других веток не будет протекать в ваш файл схемы и даст вам головную боль позже - в случае, если вы часто переключаете ветки.