2009-09-18 12 views
10

voglio usare sud nel mio progetto Django come strumento di migrazione, ma ho problema con l'utilizzo sud multiutente scenario:migrazione django e sud con conflitti (0007_two ... e 0007_one) come risolvere?

Due sviluppatori che lavorano contemporaneamente su macchine diverse creano due migrazioni con lo stesso numero

  • il primo PC: 0007_extend_lizard.py

  • sul secondo PC: 0007_swap_name_adopter.py

In questo caso, è possibile eseguire ./manage migrate --merge o ./manage migrate 0006 (rollback) ed eseguire di nuovo./manage migrate. MA quando voglio aggiungere un nuovo campo in models.py ed eseguire ./manage startmigration southdemo --auto, quindi il sud ottiene i metadati models = {} dall'ultima migrazione e ha le informazioni mancanti dalla prima migrazione. Il risultato di ciò sta creando la migrazione 0008 con la creazione di nuovi cambiamenti (!!!) dal primo 0007.

Qual è il modo migliore per risolvere questo problema?

Attualmente sto pensando a due opzioni:

  • Unire manualmente sia 0007 la migrazione in un file e quindi migrare (ma qualcuno deve eseguire "rollback")

  • spostare manualmente manca models = {} meta per durare la migrazione 0007 e poi il prossimo --auto in 0008 funzionerà perfettamente.

Qual è l'opzione migliore? O c'è qualcos'altro che mi manca?

risposta

16

Dopo aver eseguito il migrate --merge o rollback e migrazione, se si sa che la migrazione più recente ha ora modelli congelati imprecisi, vorrei solo creare una nuova migrazione no-op allo scopo di aggiornare i modelli congelati . Basta eseguire ./manage.py startmigration myapp --empty freeze_noop. Ora i tuoi modelli congelati saranno aggiornati per la prossima volta che desideri rilevare automaticamente una vera migrazione.

Forse sembra un po 'brutto creare una migrazione no-op, ma a me sembra più pulito di entrambe le opzioni di modifica della cronologia manuale suggerite. Puoi pensare alla migrazione no-op come l'equivalente di un "merge commit" in un DVCS.

Questo problema deve essere menzionato in this section of the South docs; Ho registrato an issue for it. (Aggiornamento: ora lo è.)