2012-08-07 10 views
12

Tengo una breve pregunta sobre cómo usar Django-South mientras trabajo en equipo.Conflicto de migración de Django South mientras trabajaba en un equipo

¿Qué sucede si dos personas crean simultáneamente el archivo de migración en los cambios en el mismo archivo?

Por ejemplo, A y B están trabajando en la misma aplicación Django. Están trabajando en una rama diferente y en la migración 005. Ahora, tanto A como B modifican apple/models.py y crean el archivo de migración usando startmigration. Ambos están en la migración 006 pero con un archivo de migración completamente diferente 006. Supongo que cuando fusionen sus ramas, puede haber algún error con South.

¿Hay alguna solución para resolver este conflicto? ¿O es South lo suficientemente inteligente como para resolverlo por sí mismo?

Respuesta

19

del Sur documentation habla sobre este tema:

El problema con los equipos y las migraciones se produce cuando más de una persona hace una migración en el mismo intervalo de tiempo, y ambos se confirmen a sin el otro después de haber sido aplicado . Esto es análogo a dos personas que editan el mismo archivo en un VCS al mismo tiempo, y al igual que un VCS, South tiene formas de resolver el problema.

Si esto sucede, la primera cosa a tener en cuenta es que el sur detectará el problema , y emitir un mensaje como este:

Inconsistent migration history 
The following options are available: 
    --merge: will just attempt the migration ignoring any potential dependency 
     conflicts. 

Si vuelve a ejecutar la migración con --merge, Sur simplemente se aplicará la migraciones que faltaban fuera de orden. Esto generalmente funciona, ya que los equipos están trabajando en modelos separados; si no lo hace, necesitará ver los cambios de migración reales y resolverlos manualmente, como es probable que entren en conflicto.

La segunda cosa a destacar es que, cuando se tire en algún otro cambios en el modelo completo con su propia migración, tendrá que hacer una nueva migración vacía que tiene los cambios de ambas ramas de desarrollo congelados en (Si usó mercurial, esto es equivalente a una confirmación de fusión). Para ello, basta con ejecutar:

./manage.py schemamigration --empty appname merge_models 

(Tenga en cuenta que merge_models es sólo un nombre migración; cambiarlo por lo que quiera)

El mensaje importante aquí es que el sur no es un sustituto para el equipo coordinación - de hecho, la mayoría de las características están allí para advertir que no ha coordinado, y la simple fusión en oferta es solo para los casos fáciles. Asegúrese de que su equipo sepa quién está trabajando en qué, para que no escriban migraciones que afecten a las mismas partes de el DB al mismo tiempo.

+1

Demuestra que es bueno leer los documentos;) +1 – Tadeck

Cuestiones relacionadas