Citando de la documentación de migraciones de Django :
Los archivos de migración de cada aplicación se encuentran en un directorio de "migraciones" dentro de esa aplicación y están diseñados para comprometerse y distribuirse como parte de su código base. Debería hacerlos una vez en su máquina de desarrollo y luego ejecutar las mismas migraciones en las máquinas de sus colegas, sus máquinas de preparación y, finalmente, sus máquinas de producción.
Si sigue este proceso, no debería tener ningún conflicto de fusión en los archivos de migración.
Al fusionar ramas de control de versiones, aún puede encontrar una situación en la que tenga varias migraciones basadas en la misma migración principal, por ejemplo, si diferentes desarrolladores introdujeron una migración al mismo tiempo. Una forma de resolver esta situación es introducir una _merge_migration_. A menudo, esto se puede hacer automáticamente con el comando
./manage.py makemigrations --merge
que introducirá una nueva migración que depende de todas las migraciones de cabeza actuales. Por supuesto, esto solo funciona cuando no hay conflicto entre las migraciones de cabezales, en cuyo caso tendrá que resolver el problema manualmente.
Dado que algunas personas sugirieron que no debería enviar sus migraciones al control de versiones, me gustaría ampliar las razones por las que debería hacerlo.
Primero, necesita un registro de las migraciones aplicadas a sus sistemas de producción. Si implementa cambios en producción y desea migrar la base de datos, necesita una descripción del estado actual. Puede crear una copia de seguridad separada de las migraciones aplicadas a cada base de datos de producción, pero esto parece innecesariamente engorroso.
En segundo lugar, las migraciones suelen contener código escrito a mano personalizado. No siempre es posible generarlos automáticamente con ./manage.py makemigrations
.
En tercer lugar, las migraciones deben incluirse en la revisión del código. Son cambios significativos en su sistema de producción y hay muchas cosas que pueden salir mal con ellos.
En resumen, si le preocupan sus datos de producción, verifique sus migraciones al control de versiones.
makemigrations some_app
, no solo los modelos bajo el control de ese miembro se verán afectados, sino que también se verán afectados otros modelos relacionados. Es decir, se cambiarán los archivos de migraciones (00 * _ *) en otras aplicaciones. Y eso causa muchos problemas de conflicto al presionar o extraer de GitHub. Dado que actualmente nuestro sistema no está listo para la producción, solo tenemos.gitignore
el archivo de migración. Todavía no sabemos cómo solucionarlo cuando el sistema entra en producción. ¿Alguien tiene alguna solución?