2012-08-07 14 views
12

Ho una breve domanda su come utilizzare Django-Sud mentre si lavora in una squadra.Conflitto di migrazione di Django Sud mentre si lavora in una squadra

Cosa succede se due persone creano contemporaneamente un file di migrazione su modifiche allo stesso file?

Ad esempio, A e B funzionano sulla stessa app Django. Stanno lavorando in diversi rami e entrambi alla migrazione 005. Ora, sia A che B modifica apple/models.py e crea il file di migrazione usando startmigration. Sono entrambi alla migrazione 006 ma con un file di migrazione completamente diverso 006. Credo che quando si uniranno i loro rami, potrebbe esserci qualche errore con South.

Esiste una soluzione alternativa per risolvere questo conflitto? O è abbastanza intelligente da risolverlo da solo?

risposta

19

del Sud documentation parla di questo problema:

Il problema con le squadre e le migrazioni si verifica quando più di una persona fa una migrazione nella stessa fascia oraria, ed entrambi ottenere impegnati senza l'altro essendo stato applicato . Questo è analogo a due persone che modificano lo stesso file in un VCS allo stesso tempo e, come un VCS, Sud ha modi per risolvere il problema.

In questo caso, la prima cosa da notare è che il Sud in grado di rilevare il problema , ed emettere un messaggio come questo:

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

Se rieseguire la migrazione con --merge, Sud sarà semplicemente applicare il migrazioni che erano mancanti fuori ordine. Questo di solito funziona, poiché i team stanno lavorando su modelli separati; in caso contrario, dovrai leggere le modifiche effettive alla migrazione e risolverle manualmente come , è probabile che entrino in conflitto.

La seconda cosa da notare è che, quando si tira in qualcun altro cambiamenti modello completo con la propria migrazione, è necessario fare una nuova migrazione vuota che ha le modifiche da entrambi i rami del sviluppo congelati in (se hai usato mercurial, questo è equivalente a un commit merge). Per farlo, basta eseguire:

./manage.py schemamigration --empty appname merge_models 

(Si noti che merge_models è solo un nome di migrazione; cambiarlo per quello che vuoi)

Il messaggio importante è che il Sud non è un sostituto per la squadra coordinamento - In effetti, la maggior parte delle funzioni sono lì per avvertire semplicemente che non hai coordinato, e la semplice fusione in offerta è solo lì per i casi facili. Assicurati che il tuo team sappia chi sta lavorando su cosa, in modo che non scrivano le migrazioni che interessano le stesse parti di il DB allo stesso tempo.

+1

Mostra che è buono leggere i documenti;) +1 – Tadeck

Problemi correlati