миграция django и south с конфликтами (0007_two ... и 0007_one) как решить?

StackOverflow https://stackoverflow.com/questions/1447016

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

  • на первом ПК: 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 году будет работать отлично.

Какой вариант лучше?Или есть что-то еще, чего я не понимаю?

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top