it-swarm.com.de

Was ist die beste Vorgehensweise, um Drupal Core zu aktualisieren, ohne das Git-Repo und die Produktionswebsite zu beschädigen?

Ich habe ein Git-Repository, in dem sich mein gesamter Code im Hauptzweig befindet, und ich habe zuvor nur alle Drupal -Dateien) ignoriert, sodass ich eine strikte Trennung zwischen dem von mir geschriebenen Code beibehalten habe (oder geändert oder möglicherweise geändert) und Code, der mit Drush oder was auch immer generiert werden könnte.

Dies schien eine gute Strategie zu sein, bis ich Drupal aktualisieren musste. Mir wurde klar, dass ich in der Lage sein möchte, ein Rollback durchzuführen, wenn die Dinge schlecht liefen, und welches bessere Tool als Git, um dies zu tun. Ich dachte mir, dies wäre die perfekte Situation für einen Feature-Zweig, also habe ich ein drupal-7.14 Zweig, gab es seine eigene .gitignore um alle meine Code- und Einstellungsdateien zu ignorieren und nur auf Dateien zu achten, die Teil der Drupal -Installation sind, die ich nicht berühren würde. Ich habe ein Upgrade von Hand durchgeführt (herunterladen, entpacken) Ich habe einige Einstellungen korrigiert, die mit 7.14, aber nicht mit 7.15 funktionierten, um einen 500-Fehler und dann alles zu beheben schien perfekt. Ich benannte den Zweig in drupal-7.15 und wollte mich glücklich auf den Weg machen.

Bis mir klar wurde, was ich versehentlich getan hatte: Dateien, die zuvor von meinem Hauptzweig nicht verfolgt wurden, aber im Arbeitsverzeichnis verblieben waren, wurden jetzt beim Auschecken des Masters aus dem Arbeitsverzeichnis entfernt, da es sich nicht mehr um nicht verfolgte Dateien handelte! D'oh !

Wenn ich das drupal-7.15 Zweig mit Master Ich werde die Trennung von Code verlieren.

Es gibt wahrscheinlich eine Möglichkeit, einen Zweig in ein Submodul umzuwandeln. Vorausgesetzt, das ist möglich, könnte dies die beste Strategie sein. Ich wusste vorher, dass Submodule die "richtige" Lösung sind, aber da ich den Nebeneffekt der Verwendung von Zweigen für zuvor nicht verfolgte Dateien nicht erkannte, entschied ich mich, Ecken zu schneiden und diesen Weg zu gehen. (Alle Ansätze, die ich zur Verwendung von Submodulen mit Drupal) gesehen habe, setzen voraus, dass Sie ein neues Projekt starten, und Drupal wird der Hauptzweig sein. Es ist für mich unerwünscht, den Code eines anderen zum Hauptzweig zu machen, und ich hatte bereits ein Repo mit einem Hauptzweig. Dies sah so aus, als wäre es unnötig kompliziert, nur ein Upgrade durchzuführen.)

Möglicherweise gibt es eine andere Lösung, an die ich nicht gedacht habe.

Wie kann ich mich mit möglichst wenigen Nachteilen am besten davon erholen?

[~ # ~] update [~ # ~]: Dies befindet sich in der Entwicklung (unter Linux VM auf meinem Laptop) und ist noch nicht in Produktion gegangen. Bis wir in Produktion gehen, habe ich vor, alles in Funktionsmodule zu packen, aber das ist noch nicht vorhanden.

UPDATE 2: Submodule may funktionieren nicht. Laut Pro Git können Sie mit "Submodulen ein Git-Repository als Unterverzeichnis eines anderen Git-Repositorys behalten". Drupal bietet keine solche nette Trennung. Anstelle von allem Drupal Code befindet sich in einem Unterverzeichnis, die Beziehung ist mehr oder weniger invertiert, aber es gibt immer noch Keine saubere Trennung, da Sie möglicherweise Ihre .htaccess- und robots.txt-Datei bearbeiten, sodass Ihr Code und das Drupal Repo) miteinander vermischt sind. Ich bin auf der Suche nach einer Problemumgehung dafür Problem .

13
iconoclast

Aus der obigen Diskussion geht hervor, dass es bei Ihrer Frage nicht darum geht, Ihr Git-Repo zu reparieren, sondern darum, eine Drupal - Site in Git zu pflegen und wie dies mit Kernupdates funktioniert.

Ich denke, dass die Standardpraxis darin besteht, alle Dateien in Ihrem Repository zu behalten, einschließlich Drupal Core. Die Trennung von Drupal Code von benutzerdefiniertem Code scheint eine gute Idee zu sein , aber ich denke nicht, dass es notwendig ist, und ich sehe nicht, welche Vorteile es Ihnen bietet. Es scheint auch anzunehmen, dass Sie niemals den Core patchen wollen (oder dies als Teil Ihrer Bereitstellung tun müssen), was Obwohl dies keine bewährte Methode ist, möchten Sie dies auf jeden Fall tun können, wenn in der Produktion etwas kaputt geht. Wenn Sie Ihre Commits gut und konzentriert halten, können Sie auch diese Art der Trennung erreichen.

Die Lösung, die ich verwendet habe, besteht darin, den gesamten Code im selben Repository zu belassen, so viel wie möglich in Features oder andere Arten von Exporten/Code/Konfiguration einzufügen und eine Liste der Patches zu verwalten, die auf Out-of-the-Anwendungen angewendet werden müssen -box Kern und Contrib.

Wenn Sie den Core aktualisieren, starten Sie in Ihrer Entwicklungsumgebung:

  • Stellen Sie sicher, dass das Arbeitsverzeichnis sauber ist
  • Neue Datenbank sichern (drush sql-dump). Machen Sie entweder ein Commit mit dem Dump oder speichern Sie es an einem sicheren Ort.
  • Kern aktualisieren (drush up drupal)
  • Übernehmen Sie alle Änderungen.
  • Überprüfen Sie die Patch-Datei. Wenn Patches angewendet werden müssen, wenden Sie sie an und führen Sie ein weiteres Commit durch
  • Führen Sie bei Bedarf update.php aus (bereits erledigt, wenn Sie drush für das Update verwendet haben).
  • Testen Sie Ihre Entwicklungsseite. Wenn alles in Ordnung ist, senden Sie den Code an die Produktion. Lauf drush updb auf Produktion.
  • Wenn es ein Problem gibt und Sie zurücksetzen müssen, können Sie Ihr Repo entweder zurücksetzen oder zurücksetzen (git reset --hard HEAD~2 sollte es tun) oder die beiden Commits zurücksetzen, wenn Sie den Verlauf beibehalten möchten. Ersetzen Sie Ihre Datenbank durch den Speicherauszug.

Der Datenbankspeicherauszug ist erforderlich, da Sie ansonsten Änderungen an der Datenbank durch Aktualisierungen nicht rückgängig machen können. Sie können die Aktualisierung auch in einem Zweig durchführen. In diesem Fall bedeutet das Zurücksetzen nur das Auschecken des Masters. Es ist etwas nicht ratsam, wenn Sie an einer Entwicklungssite arbeiten, da Sie aufgrund der Datenbank nicht wirklich zum Master zurückkehren und dort parallel weiterarbeiten können.

Wenn Sie diesen einfacheren git-seitigen Workflow verwenden, können Sie die volle Leistung von git bei Bedarf nutzen, ohne dass Submodule usw. erforderlich sind. Wenn dies nicht angemessen erscheint, können Sie erklären, warum Sie eine weitere Codetrennung benötigen?

10
goron

Ich führe das Setup mit zwei Zweigen aus, genau wie das OP: einem Zweig nur mit meinem benutzerdefinierten Code und einem Zweig, der sowohl meine benutzerdefinierten als auch meine Kerndateien enthält. Ich bin auf die gleiche Situation gestoßen: Die ignorierten Kerndateien werden beim Wechsel zwischen Zweigen entfernt.

Am Ende hatte ich zwei identische Git-Verzeichnisse: - eines für die Arbeit an meinem benutzerdefinierten Code, wobei die Kerndateien vorhanden, aber ignoriert wurden, und ich würde niemals zum "vollständigen" Zweig in diesem Verzeichnis wechseln - eines für die Durchführung von Zusammenführungen, so dass ich würde Führen Sie das Verzweigen und Zusammenführen nur in diesem Verzeichnis durch.

Der Grund, warum ich mich für dieses Setup mit zwei Zweigen entschieden habe, ist, dass ich alle lokalen Commits für Kerndateien einfach nachverfolgen möchte. Es ist einfacher, Kernmods zu überprüfen und erneut anzuwenden, wenn Kerndateien aktualisiert werden.

0
sillyxone

Aus meinen obigen Kommentaren geht es bei dieser Frage darum, eine Drupal Site -Datei ) mit git zu verwalten und wie das funktioniert Sie haben nichts über das Sichern und Aktualisieren der Datenbank erwähnt. Ich werde versuchen, nichts von der goron-Antwort zu kopieren.

Ich habe einen Blog-Beitrag zu diesem Problem erstellt pgrade Drupal Core auf Ihrer Website mit Git

Alternative Methoden

  1. Drush-Befehl ausführen drush up drupal
  2. Wenden Sie einen Patch der Unterschiede zwischen den Versionen an. Siehe http://drupal.org/node/359234 & http://fuerstnet.de/de/drupal-upgrade-easier

Sie haben dies nicht angegeben, aber wenn Sie daran interessiert sind, die Änderungen zwischen Drupal -Versionen) zu verfolgen, würde ich dies tun, indem Sie Tags anstelle von verwenden -zweige. Wenn Sie mit Ihrem Upgrade fertig sind, verpflichten Sie sich zu master. Kennzeichnen Sie Ihren Code als 7.x.

0
iStryker