Citando dalla documentazione delle migrazioni di Django :
I file di migrazione per ciascuna app risiedono in una directory "migrations" all'interno di tale app e sono progettati per essere salvati e distribuiti come parte della sua base di codice. Dovresti crearli una volta sulla tua macchina di sviluppo e quindi eseguire le stesse migrazioni sulle macchine dei tuoi colleghi, sulle tue macchine di staging e infine sulle tue macchine di produzione.
Se segui questo processo, non dovresti ricevere alcun conflitto di unione nei file di migrazione.
Quando si uniscono i rami del controllo della versione, è comunque possibile che si verifichino più migrazioni basate sulla stessa migrazione principale, ad esempio se diversi sviluppatori hanno introdotto una migrazione contemporaneamente. Un modo per risolvere questa situazione è introdurre una _merge_migration_. Spesso questo può essere fatto automaticamente con il comando
./manage.py makemigrations --merge
che introdurrà una nuova migrazione che dipende da tutte le attuali migrazioni di testa. Ovviamente questo funziona solo quando non c'è conflitto tra le migrazioni delle testine, nel qual caso dovrai risolvere il problema manualmente.
Dato che alcune persone qui hanno suggerito che tu non si deve commettere i tuoi migrazioni verso il controllo di versione, mi piacerebbe approfondire le ragioni per cui in realtà si dovrebbe fare così.
Innanzitutto, è necessario un record delle migrazioni applicate ai sistemi di produzione. Se si distribuiscono modifiche alla produzione e si desidera migrare il database, è necessaria una descrizione dello stato corrente. È possibile creare un backup separato delle migrazioni applicate a ciascun database di produzione, ma questo sembra inutilmente macchinoso.
In secondo luogo, le migrazioni spesso contengono codice personalizzato scritto a mano. Non è sempre possibile generarli automaticamente con./manage.py makemigrations
.
Terzo, le migrazioni dovrebbero essere incluse nella revisione del codice. Sono modifiche significative al sistema di produzione e ci sono molte cose che possono andare storte.
Quindi, in breve, se ti interessano i tuoi dati di produzione, controlla le tue migrazioni nel controllo della versione.
makemigrations some_app
, non saranno interessati solo i modelli sotto il controllo di quel membro, ma anche altri modelli correlati. Cioè, i file di migrazione (00 * _ *) in altre app verranno modificati. E questo causa molti problemi di conflitto durante il push o il pull da GitHub. Poiché attualmente il nostro sistema non è pronto per la produzione, abbiamo solo.gitignore
il file di migrazione. Non sappiamo ancora come risolverlo quando il sistema va in produzione. Qualcuno ha delle soluzioni?