Mengutip dari dokumentasi migrasi Django :
File migrasi untuk setiap aplikasi berada dalam direktori "migrasi" di dalam aplikasi itu, dan dirancang untuk digunakan, serta didistribusikan sebagai bagian dari, basis kodenya. Anda harus membuatnya sekali di mesin pengembangan Anda dan kemudian menjalankan migrasi yang sama di mesin rekan Anda, mesin staging Anda, dan akhirnya mesin produksi Anda.
Jika Anda mengikuti proses ini, Anda tidak akan mendapatkan konflik penggabungan apa pun di file migrasi.
Saat menggabungkan cabang kontrol versi, Anda masih mungkin menghadapi situasi di mana Anda memiliki beberapa migrasi berdasarkan migrasi induk yang sama, misalnya jika pengembang yang berbeda memperkenalkan migrasi secara bersamaan. Salah satu cara untuk mengatasi situasi ini adalah dengan memperkenalkan _merge_migration_. Seringkali ini dapat dilakukan secara otomatis dengan perintah
./manage.py makemigrations --merge
yang akan memperkenalkan migrasi baru yang bergantung pada semua migrasi head saat ini. Tentu saja ini hanya berfungsi jika tidak ada konflik antara migrasi head, dalam hal ini Anda harus menyelesaikan masalah secara manual.
Mengingat bahwa beberapa orang di sini menyarankan agar Anda tidak melakukan migrasi ke kontrol versi, saya ingin menjelaskan alasan mengapa Anda sebenarnya harus melakukannya.
Pertama, Anda memerlukan catatan migrasi yang diterapkan ke sistem produksi Anda. Jika Anda menerapkan perubahan pada produksi dan ingin memigrasi database, Anda memerlukan deskripsi tentang status saat ini. Anda dapat membuat cadangan terpisah dari migrasi yang diterapkan ke setiap database produksi, tetapi ini tampaknya tidak praktis.
Kedua, migrasi sering kali berisi kode tulisan tangan kustom. Tidak selalu mungkin untuk membuatnya secara otomatis dengan ./manage.py makemigrations
.
Ketiga, migrasi harus dimasukkan dalam tinjauan kode. Itu adalah perubahan yang signifikan pada sistem produksi Anda, dan ada banyak hal yang bisa salah dengannya.
Jadi singkatnya, jika Anda peduli dengan data produksi Anda, periksa migrasi Anda ke kontrol versi.
makemigrations some_app
, tidak hanya model di bawah kendali anggota itu yang akan terpengaruh, tetapi model terkait lainnya juga akan terpengaruh. Artinya, file migrasi (00 * _ *) di aplikasi lain akan diubah. Dan itu menyebabkan banyak masalah konflik selama mendorong atau menarik dari GitHub. Karena saat ini sistem kami belum siap produksi, kami tinggal.gitignore
file migrasi. Kami masih belum tahu bagaimana menyelesaikannya saat sistem berproduksi. Apakah ada yang punya solusi?