2012-08-07 8 views
12

Ich habe eine kurze Frage, wie man Django-South während der Arbeit in einem Team benutzt.Django Südmigrationskonflikt während der Arbeit in einem Team

Was passiert, wenn zwei Personen gleichzeitig eine Migrationsdatei für Änderungen an derselben Datei erstellen?

Zum Beispiel arbeiten A und B auf der gleichen Django App. Sie arbeiten in verschiedenen Zweigen und beide bei der Migration 005. Jetzt ändern sowohl A als auch B apple/models.py und erstellten die Migrationsdatei mit Startmigration. Sie sind beide auf der Migration 006, aber mit komplett anderer Migrationsdatei 006. Ich denke, wenn sie ihre Zweige zusammenführen, könnte es einen Fehler mit South geben.

Gibt es eine Problemumgehung, um diesen Konflikt zu lösen? Oder ist Süd intelligent genug, um es selbst zu lösen?

Antwort

19

documentation Gespräche über dieses Thema Süd:

Das Problem mit Teams und Migrationen tritt auf, wenn mehr als eine Person eine Migration in den gleichen Zeitschlitz macht, und sie bekommen beide engagierte ohne das andere aufgebracht wurde . Dies ist analog zu zwei Personen Bearbeitung der gleichen Datei in einem VCS zur gleichen Zeit, und wie ein VCS, hat South Möglichkeiten zur Lösung des Problems.

Wenn dies geschieht, das erste, was zu beachten ist, dass der Süd das Problem erkennt, und eine Meldung wie diese Ausgabe:

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

Wenn Sie erneut ausgeführt mit --merge migrieren, Süd einfach gilt die Migrationen, die nicht in der Reihenfolge fehlten. Dies funktioniert normalerweise, da Teams an separaten Modellen arbeiten; Wenn dies nicht der Fall ist, müssen Sie die tatsächlichen Migrationsänderungen betrachten und sie manuell beheben, da wahrscheinlich einen Konflikt verursacht.

Das zweite, was zu beachten ist, dass, wenn Sie in einem fremden Modellwechsel komplett mit ihrer eigenen Migration ziehen, müssen Sie eine neue leere Migration machen, dass die Änderungen aus den beiden Zweigen der Entwicklung hat eingefroren (Wenn Sie mercurial verwendet haben, entspricht dies einem Zusammenführungs-Commit). Dazu einfach laufen:

./manage.py schemamigration --empty appname merge_models 

(Beachten Sie, dass merge_models ist nur eine Migration Namen, ändern Sie es für , was Sie wollen)

Die hier wichtige Botschaft ist, dass die Süd ist kein Ersatz für Team Koordination - in der Tat, die meisten Funktionen sind nur zu warnen Sie, dass Sie nicht koordiniert haben, und die einfache Zusammenführung im Angebot ist nur dort für die einfachen Fällen. Stellen Sie sicher, dass Ihr Team weiß, wer auf was arbeitet, so dass sie keine Migrationen schreiben, die die gleichen Teile von zur gleichen Zeit betreffen.

+1

Es zeigt, dass es gut ist, die Dokumente zu lesen;) +1 – Tadeck