Arbeiten an einem Projekt mit mehreren Zweigen, bei dem jeder Zweig schließlich wieder mit dem Hauptzweig zusammengeführt und im Wesentlichen isoliert wird, um ein neues Feature zu entwickeln.
Die Datenbank, bei der es sich um MS SQL Server handelt, verfügt über ein gemeinsames Schema. Jeder Zweig nimmt jedoch im Verlauf Änderungen am Schema vor.
Meine primäre Frage ist, wie Sie das Schema von der Hauptverzweigung bis zur abgeleiteten Verzweigung gemeinsam nutzen können, damit Änderungen, die an der Hauptverzweigung vorgenommen werden, problemlos in die abgeleitete Verzweigung übernommen werden können, ohne dass neue Änderungen in der abgeleiteten Verzweigung vorgenommen werden müssen Ast?
Antworten:
Ich habe die folgende in der Versionskontrolle und Ihrer Datenbank ausgearbeitete Methode erfolgreich angewendet :
Ich höre oft die Meinung: "Wie unterscheidet sich das davon, nur die Objektdefinitionsskripte unter Versionskontrolle zu halten?". Der Unterschied ist enorm, da Sie beim Bereitstellen einer neuen Version Ihrer App nicht einfach eine neue Datenbank erstellen. In den meisten Fällen muss Ihre App die vorhandene Datenbank einschließlich der vorhandenen Daten aktualisieren . Dies ist ein entscheidender Unterschied. Ihre Upgrade-Schritte müssen die Integrität und Konsistenz der vorhandenen Daten während des Upgrades sicherstellen. Einige Operationen sind im Code trivial (fügen Sie eine nicht nullfähige Spalte mit dem Standardwert zum Tabellenobjektdefinitionsskript hinzu, erledigt), aber tatsächlich sind sie bei der tatsächlichen Bereitstellung äußerst schmerzhaft (die Tabelle hat 1,5 Milliarden Zeilen, die Spalte add würde ausgehen) von Log-Platz, wenn die "simpleton" Weise getan).
Wie funktioniert das mit der Verzweigung:
Beachten Sie, dass kein Tool, kein Magic Schema Diff Scripting, keine Assistenten und kein Skript zum Generieren von Rechtsklicks erforderlich sind. Dies ist ein zu 100% von Entwicklern gesteuerter Prozess, der auf der Quelle (Skripten) basiert. Viele finden diesen ganzen Prozess aufwendig, aber es funktioniert. Tatsächlich haben Sie als SQL Server-Benutzer die Ergebnisse dieses Prozesses bereits für die tägliche Verwendung von SQL Server genutzt: SQL Server selbst verwendet einen sehr ähnlichen Datenbankaktualisierungsprozess, und wie Sie wahrscheinlich erwarten, wird der Produktentwicklungsprozess umfassend genutzt Verzweigung und das Problem, das Sie erwähnt haben, ist ein sehr reales Problem, das gelöst werden muss.
Übrigens, wie die Verzweigung / Integration tatsächlich abläuft, unterscheidet sich zwischen den Quellcodeverwaltungsprodukten. Ich verwende die aus dem Perforce- Integrate- Betriebsmodus bekannten Begriffe .
quelle
Meine Antwort ist vielleicht nicht so lang wie die von Remus, aber ich fand, dass dies eine wirklich gute Lösung ist. Ich habe es noch nicht in der Produktion eingerichtet, also YMMV *.
Liquibase
Im Wesentlichen handelt es sich um eine XML-Datei, in der Sie Schemaänderungen an Ihrer Datenbank als neue Elemente in der XML-Datei vornehmen. Beispielsweise:
Die Syntax ist vollständig ausgearbeitet, sodass Sie so ziemlich alles tun können, was Sie möchten.
Sie geben in Ihrer Liquibase-Installation auch an, welche Datenbank versioniert werden soll. Anschließend führen Sie die XML-Datei mit der enthaltenen ausführbaren Java-Datei (JAR-Datei) aus. Dadurch werden im Wesentlichen die in der XML angegebenen Änderungen an Ihrer Datenbank neu erstellt.
Der eigentliche Kicker ist, dass Sie diese XML-Datei im selben versionierten Ordner wie Ihren Code speichern. In meinem Fall war das also Git. Ich hatte diese XML-Datei in meinem Projektordner (dieselbe Ebene wie /.git) und wenn ich dann die Verzweigung wechselte, änderte sich die XML-Datei in diese Verzweigungsversion und ich führte die JAR-Datei aus und meine Datenbank spiegelte nun diese Verzweigung wider.
* Hinweis: Ich habe die Implementierung noch nicht abgeschlossen, da ich Probleme hatte, Java mit SQL Server zu verbinden. Benötigt einige JDBC-Treiber und so und ich war nicht in der Stimmung. Daher kann Ihr Kilometerstand variieren.
quelle
Hier bei Red Gate veröffentlichen wir in Kürze eine Datenbankversionslösung, die sowohl SQL Compare als auch SQL Source Control nutzt. Hierbei wird ein Upgrade-Ansatz für Migrationsskripten verwendet, und die Datenbank wird mit einer versionierten Eigenschaft gestempelt, die einer Versionsverwaltungsversion entspricht.
Wir hoffen, Mitte Dezember erscheinen zu können. Derzeit ist ein Release Candidate verfügbar. Für weitere Informationen besuchen Sie:
http://www.red-gate.com/products/sql-development/sql-source-control/entrypage/migration
Wir hoffen, dass wir in den kommenden Monaten auf dieser Lösung aufbauen können. Teilen Sie uns Ihre Meinung mit.
quelle
Wenn Sie und Ihre Schemaänderungen durch Generieren von Skripten und Beibehalten der Quellcodeverwaltung behandelt werden, sollten Sie in der Lage sein, die Änderungen wie bei jeder anderen Codezusammenführung zu behandeln. Sie können auswählen, ob automatisch zusammengeführt oder weitere manuelle Eingriffe vorgenommen werden sollen.
quelle
Ich bin in einer ähnlichen Situation, in der ich an einer Live-Website und mehreren Entwicklungszweigen arbeite, in denen ich das Datenbankschema ändern muss.
Ich habe es gelöst, indem ich einen Post-Checkout und einen Post-Merge-Hook geschrieben habe, die gut mit git verwendet werden können. Ich speichere alle meine Migrationen in Form von SQL-Dateien in einem separaten Verzeichnis und übergebe sie zusammen mit dem geänderten PHP-Code. Jedes Mal, wenn ich eine
oder ein
git ruft automatisch die entsprechenden Up- und Down-Migrationen auf. Siehe meine Implementierung auf Github .
quelle