Situation
Ich habe zwei Server, Produktion und Entwicklung. Auf dem Produktionsserver gibt es zwei Anwendungen und mehrere (6) Datenbanken (MySQL), die ich Entwicklern zum Testen zur Verfügung stellen muss. Alle Quellcodes sind auf GitLab auf dem Entwicklungsserver gespeichert, und die Entwickler arbeiten nur mit diesem Server und haben keinen Zugriff auf den Produktionsserver. Wenn wir eine Anwendung veröffentlichen, meldet sich der Master auf der Produktionsseite an und zieht die neue Version von Git. Die Datenbanken sind groß (jeweils über 500M und zählend) und ich muss sie so einfach wie möglich an Entwickler für Tests verteilen.
Mögliche Lösungen
-
Nach einem Sicherungsskript, das Datenbanken dumppt, jeder in eine einzelne Datei, führen Sie ein Skript aus, das jede Datenbank in ihren eigenen Zweig schiebt. Ein Entwickler zieht einen dieser Zweige, wenn er seine lokale Kopie aktualisieren möchte.Diese Lösung funktionierte nicht.
-
Cron auf dem Produktionsserver speichert täglich Binärprotokolle und schiebt sie in den Zweig dieser Datenbank. Auf diese Weise gibt es im Zweig Dateien mit täglichen Änderungen, und der Entwickler zieht die Dateien, die er nicht hat. Der aktuelle SQL-Dump wird auf andere Weise an den Entwickler gesendet. Und wenn die Größe des Repositories zu groß wird, senden wir einen vollständigen Dump an die Entwickler und löschen alle Daten im Repository und starten von vorne.
Fragen
- Ist die Lösung möglich?
- Wenn git in das Repository pusht/pullt, lädt es dann ganze Dateien hoch/runter oder nur Änderungen darin (d.h. fügt neue Zeilen hinzu oder bearbeitet die aktuellen)?
Kann Git mit so großen Dateien umgehen?Nein.Wie kann man festlegen, wie viele Revisionen in einem Repository aufbewahrt werden?Mit der neuen Lösung spielt das keine Rolle.- Gibt es eine bessere Lösung? Ich möchte die Entwickler nicht zwingen, solch große Dateien über FTP oder ähnliches herunterzuladen.