Джанго и Южная миграция с конфликтами (0007_two ... и 0007_one), как решить? - PullRequest
10 голосов
/ 19 сентября 2009

Я хочу использовать юг в моем проекте django в качестве инструмента миграции, но у меня проблема с использованием юга в многопользовательском сценарии:

Два разработчика, работающие одновременно на разных машинах, создают две миграции с одинаковым номером

  • на первом ПК: 0007_extend_lizard.py

  • на втором ПК: 0007_swap_name_adopter.py

В этом случае я могу запустить ./manage migrate --merge или ./manage migrate 0006 (откат) и снова запустить ./manage migrate. НО, когда я хочу добавить новое поле в models.py и запустить ./manage startmigration southdemo --auto, тогда юг получает models = {} метаданные из последней миграции, и в ней отсутствует информация из первой миграции. В результате создается миграция 0008 с повторным созданием (!!!) изменений от первой 0007.

Как лучше всего решить эту проблему?

В настоящее время я думаю о двух вариантах:

  • Вручную объединить миграцию 0007 в один файл, а затем выполнить миграцию (но кто-то должен выполнить «откат»)

  • Вручную переместить отсутствующую мета models = {} в последнюю миграцию 0007, и тогда следующая --auto в 0008 будет работать отлично.

Какой вариант лучше? Или я что-то пропустил?

1 Ответ

16 голосов
/ 19 сентября 2009

После выполнения migrate --merge или отката-и-миграции, если вы знаете, что в самой последней миграции теперь есть неточные замороженные модели, я просто создал бы новую неоперативную миграцию для целей доведения замороженных моделей до Дата. Просто запустите ./manage.py startmigration myapp --empty freeze_noop. Теперь ваши замороженные модели будут обновлены в следующий раз, когда вы захотите автоматически обнаружить реальную миграцию.

Может быть, кажется немного уродливым создавать перенос без операции, но мне кажется, что это чище, чем любой из предложенных вами вариантов редактирования истории вручную. Вы можете рассматривать миграцию без операции как эквивалент «фиксации слияния» в DVCS.

Эта проблема должна быть упомянута в этом разделе Южных документов ; Я подал вопрос для него . (Обновление: теперь оно есть.)

...