Django и юг миграции с конфликтами (0007_two... и 0007_one), как решить?
Я хочу использовать юг в своем проекте django в качестве инструмента миграции, но у меня проблема с использованием юга в многопользовательском сценарии:
Два разработчика, работающие одновременно на разных машинах, создают две миграции с одинаковым числом
В этом случае я могу запустить ./manage migrate --merge
или ./manage migrate 0006
(откат) и запустить снова ./manage migrate
. НО, когда я хочу добавить новое поле в models.py
и запустив ./manage startmigration southdemo --auto
, юг получит метаданные models = {}
от последней миграции, и у нее не было информации из первой миграции. Результатом этого является создание миграции 0008 с созданием снова (!!!) изменений с первого 0007.
Какой лучший способ решить эту проблему?
В настоящее время я думаю о двух вариантах:
-
Вручную объединить миграцию 0007 в один файл и затем выполнить миграцию (но кто-то должен выполнить "откат" )
-
Вручную переместите недостающую models = {}
meta для последней миграции 0007, а затем следующий --auto
в 0008 будет работать отлично.
Какой лучший вариант? Или есть что-то еще, что мне не хватает?
Ответы
Ответ 1
После выполнения migrate --merge
или rollback-and-migrate, если вы знаете, что в самой последней миграции теперь есть неточные замороженные модели, я бы просто создал новую миграцию без операции для целей доведения замороженных моделей до Дата. Просто запустите ./manage.py startmigration myapp --empty freeze_noop
. Теперь ваши замороженные модели будут обновлены в следующий раз, когда вы захотите автоматически определить реальную миграцию.
Может показаться немного уродливым создать перенос no-op, но для меня это кажется более чистым, чем любой из предложенных вручную вариантов редактирования истории. Вы можете думать о миграции no-op как эквивалент "слияния" в DVCS.
Этот вопрос следует упомянуть в в этом разделе южных документов; Я зарегистрировал проблему для него. (Обновление: теперь оно есть.)