2009-09-18 10 views
10

quiero usar al sur en mi proyecto Django como herramienta de migración, pero no tengo problema con el uso del Sur en el escenario multiusuario:django y migración sur con conflictos (0007_two ... y 0007_one) ¿cómo resolverlo?

Dos desarrolladores que trabajan simultáneamente en diferentes máquinas crean dos migraciones con mismo número

  • en primer PC: 0007_extend_lizard.py

  • en la segunda PC: 0007_swap_name_adopter.py

En este caso puedo ejecutar ./manage migrate --merge o ./manage migrate 0006 (reversión) y ejecutar nuevamente./manage migrate. PERO cuando quiero agregar un campo nuevo en models.py y ejecutar ./manage startmigration southdemo --auto, sur obtiene models = {} metadatos de la última migración y le falta información de la primera migración. El resultado de esto es la migración de la creación 0008 con la creación de cambios (de nuevo) de la primera 0007.

¿Cuál es la mejor manera de resolver este problema?

Actualmente estoy pensando en dos opciones:

  • fusionar manualmente tanto la migración 0007 en un archivo y luego migran (pero alguien debe ejecutar "rollback")

  • mover manualmente falta models = {} meta a la última migración 0007 y luego la siguiente --auto en 0008 funcionará perfectamente.

¿Cuál es la mejor opción? ¿O hay algo más que me estoy perdiendo?

Respuesta

16

Después de realizar el migrate --merge o rollback-and-migrate, si sabe que la migración más reciente ahora tiene modelos congelados inexactos, solo crearía una nueva migración no operativa con el objetivo de actualizar los modelos congelados . Simplemente ejecute ./manage.py startmigration myapp --empty freeze_noop. Ahora sus modelos congelados estarán actualizados para la próxima vez que quiera autodetectar una migración real.

Quizás parezca un poco feo crear una migración no operativa, pero a mí me parece más limpio que cualquiera de las opciones de edición de historia manual sugeridas. Puede pensar en la migración no operativa como el equivalente de una "confirmación de fusión" en un DVCS.

Este problema debe mencionarse en this section of the South docs; He archivado an issue for it. (Actualización: ahora lo es.)

Cuestiones relacionadas