Цитуючи документацію про міграцію Django :
Файли міграції для кожної програми перебувають у каталозі "міграції" всередині цього додатка, і вони розроблені для того, щоб їх було надано та розповсюджено як частина її кодової бази. Ви повинні зробити їх один раз на своїй розробці, а потім виконати однакові міграції на машинах своїх колег, ваших постановочних машинах і, нарешті, ваших виробничих машинах.
Якщо ви дотримуєтеся цього процесу, у вас не повинно виникати конфліктів злиття у файлах міграції.
Під час об'єднання гілок управління версіями ви все ще можете зіткнутися з ситуацією, коли у вас є кілька міграцій на основі однієї батьківської міграції, наприклад, якщо різні розробники ввели міграцію одночасно. Одним із способів вирішення цієї ситуації є запровадження _merge_migration_. Часто це можна зробити автоматично за допомогою команди
./manage.py makemigrations --merge
яка введе нову міграцію, яка залежить від усіх поточних міграцій голови. Звичайно, це працює лише тоді, коли між міграціями голови немає конфлікту, і в цьому випадку проблему доведеться вирішити вручну.
Зважаючи на те, що деякі люди тут пропонували, що ви не повинні здійснювати міграцію для контролю версій, я хотів би розповісти про причини, чому ви насправді повинні це зробити.
По-перше, вам потрібен запис міграцій, застосованих до ваших виробничих систем. Якщо ви розгортаєте зміни у виробництві та хочете перенести базу даних, вам потрібен опис поточного стану. Можна створити окрему резервну копію міграцій, застосованих до кожної виробничої бази даних, але це здається зайвим громіздким.
По-друге, міграції часто містять нестандартний рукописний код. Не завжди можливо автоматично генерувати їх за допомогою ./manage.py makemigrations
.
По-третє, міграції повинні бути включені в огляд коду. Вони суттєво змінюються у вашій виробничій системі, і є багато речей, які можуть з ними піти не так.
Отже, коротше, якщо ви дбаєте про свої виробничі дані, будь ласка, перевірте свої міграції до контролю версій.
makemigrations some_app
, це стосуватиметься не тільки моделей, які перебувають під його контролем, але й інших пов'язаних моделей. Тобто файли міграції (00 * _ *) в інших додатках будуть змінені. А це спричиняє багато конфліктних проблем під час натискання на GitHub або його витягування. Оскільки наразі наша система не готова до виробництва, ми просто.gitignore
файл міграції. Ми досі не знаємо, як це вирішити, коли система прийде у виробництво. У когось є якісь рішення?