Citando a documentação de migração do Django :
Os arquivos de migração para cada aplicativo residem em um diretório de “migrações” dentro desse aplicativo e são projetados para serem comprometidos e distribuídos como parte de sua base de código. Você deve criá-los uma vez na máquina de desenvolvimento e, em seguida, executar as mesmas migrações nas máquinas dos seus colegas, nas máquinas de teste e, eventualmente, nas máquinas de produção.
Se você seguir este processo, não deverá obter nenhum conflito de mesclagem nos arquivos de migração.
Ao mesclar ramos de controle de versão, você ainda pode encontrar uma situação em que tenha múltiplas migrações baseadas na mesma migração pai, por exemplo, se para diferentes desenvolvedores introduziram uma migração simultaneamente. Uma maneira de resolver essa situação é introduzir uma _merge_migration_. Freqüentemente, isso pode ser feito automaticamente com o comando
./manage.py makemigrations --merge
que irá introduzir uma nova migração que depende de todas as migrações de cabeçalhos atuais. Claro que isso só funciona quando não há conflito entre as migrações do cabeçote, caso em que você terá que resolver o problema manualmente.
Dado que algumas pessoas aqui sugeriram que você não deveria comprometer suas migrações para o controle de versão, gostaria de expandir os motivos pelos quais você realmente deveria fazer isso.
Primeiro, você precisa de um registro das migrações aplicadas aos seus sistemas de produção. Se você implantar mudanças na produção e quiser migrar o banco de dados, precisará de uma descrição do estado atual. Você pode criar um backup separado das migrações aplicadas a cada banco de dados de produção, mas isso parece desnecessariamente complicado.
Em segundo lugar, as migrações geralmente contêm código personalizado escrito à mão. Nem sempre é possível gerá-los automaticamente com ./manage.py makemigrations
.
Terceiro, as migrações devem ser incluídas na revisão do código. Eles são mudanças significativas em seu sistema de produção e há muitas coisas que podem dar errado com eles.
Resumindo, se você se preocupa com seus dados de produção, verifique suas migrações para o controle de versão.
makemigrations some_app
, não apenas os modelos sob o controle desse membro serão afetados, mas também outros modelos relacionados serão afetados. Ou seja, os arquivos de migração (00 * _ *) em outros aplicativos serão alterados. E isso causa muitos problemas de conflito durante o push ou pull do GitHub. Como atualmente nosso sistema ainda não está pronto para produção, ficamos apenas com.gitignore
o arquivo de migração. Ainda não sabemos como resolver quando o sistema entrar em produção. Alguém tem alguma solução?