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 streng zwischen dem von mir geschriebenen (oder geänderten oder möglicherweise geänderten) Code und dem Code unterschieden habe das könnte mit Drush oder was auch immer erzeugt werden.
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 zu verwenden ist als Git, um dies zu tun. Ich dachte mir, dies wäre die perfekte Situation für einen Feature-Zweig, also habe ich einen drupal-7.14
Zweig erstellt, der es .gitignore
mir erlaubt, alle meine Code- und Einstellungsdateien zu ignorieren und nur auf Dateien zu achten, die Teil der Drupal-Installation sind, die ich nicht möchte. ' nicht berühren. Ich habe ein manuelles Upgrade durchgeführt (Herunterladen, Entpacken, Entpacken, Kopieren), Grenzfälle wie robots.txt und .htaccess durchgesehen und den .gitignore von Drupal mit meinem eigenen überschrieben. Ich habe einige Einstellungen korrigiert, die mit 7.14, aber nicht mit 7.15 funktionierten, um einen 500-Fehler zu beheben, und dann schien alles perfekt zu sein. Ich benannte die Niederlassung in um drupal-7.15
und wollte mich glücklich auf den Weg machen.
Bis ich merkte, was ich versehentlich getan hatte: Dateien, die zuvor von meinem Hauptzweig nicht verfolgt wurden, aber im Arbeitsverzeichnis verblieben waren, wurden jetzt aus dem Arbeitsverzeichnis entfernt, als ich master auscheckte, da es sich nicht mehr um nicht verfolgte Dateien handelte! D'oh!
Wenn ich die drupal-7.15
Verzweigung mit master zusammenführe, geht die Codetrennung verloren.
Es gibt wahrscheinlich eine Möglichkeit, einen Zweig in ein Submodul umzuwandeln. Vorausgesetzt, dies ist möglich, ist dies möglicherweise die beste Strategie. Ich wusste, bevor ich das tat, dass Submodule die "richtige" Lösung waren, 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 bei der Verwendung von Submodulen mit Drupal gesehen habe, setzen voraus, dass Sie ein neues Projekt starten und Drupal der Hauptzweig ist. Es ist für mich unerwünscht, den Code eines anderen zum Hauptzweig zu machen, und das hatte ich bereits ein Repo mit einem Master-Zweig. Es 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 den geringstmöglichen Nachteilen am besten davon erholen?
AKTUALISIEREN : Dies befindet sich in der Entwicklung (in einer Linux-VM auf meinem Laptop) und ist noch nicht in Produktion gegangen. Bis wir zur Produktion gehen, habe ich vor, alles in Feature-Modulen zu verpacken, aber das ist noch nicht alles.
UPDATE 2 : Submodulefunktionieren möglicherweise nicht. Laut Pro Git können Sie mit "Submodulen ein Git-Repository als Unterverzeichnis eines anderen Git-Repositorys speichern". Drupal bietet keine so schöne Trennung. Anstatt dass sich der gesamte Drupal-Code in einem Unterverzeichnis befindet, ist die Beziehung 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 werden. Ich suche nach einer Lösung für dieses Problem .
quelle
Antworten:
Aus der obigen Diskussion geht es bei Ihrer Frage nicht darum, 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 des Drupal-Kerns. Die Trennung von Drupal-Code von benutzerdefiniertem Code scheint eine nette Idee zu sein, aber ich denke nicht, dass dies notwendig ist, und ich sehe keine Vorteile, die sich daraus ergeben. Es scheint auch davon auszugehen, dass Sie den Core niemals patchen möchten (oder dies als Teil Ihrer Bereitstellung tun müssen). Dies ist zwar keine bewährte Methode, aber auf jeden Fall etwas, das Sie tun möchten, wenn etwas kaputt geht in Produktion. Halten Sie Ihre Commits nett und konzentriert, um diese Art der Trennung zu 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 / Konfigurationen zu speichern und eine Liste der Patches zu erstellen, die auf Out-of-the-Server angewendet werden müssen -Box Kern und Beitr.
Wenn Sie den Core aktualisieren, starten Sie in Ihrer Entwicklungsumgebung:
drush sql-dump
). Machen Sie entweder ein Commit mit dem Dump oder speichern Sie es an einem sicheren Ort.drush up drupal
)drush updb
Auf Produktion .git reset --hard HEAD~2
sollte es tun), oder setzen Sie die beiden Commits zurück, wenn Sie den Verlauf beibehalten möchten. Ersetzen Sie Ihre Datenbank durch den Speicherauszug.Der Datenbankspeicherauszug ist erforderlich, da Sie ansonsten Änderungen, die durch Aktualisierungen an der Datenbank vorgenommen wurden, nicht rückgängig machen können. Sie können die Aktualisierung auch in einem Zweig vornehmen. In diesem Fall bedeutet das Zurücksetzen nur das Auschecken des Masters. Es ist nicht ratsam, wenn Sie an einer Entwickler-Site 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 nutzen, wenn Sie sie benötigen, ohne dass Submodule usw. erforderlich sind.
quelle
Aus meinen obigen Kommentaren geht es bei dieser Frage darum , wie Drupal-Site- Dateien mit git verwaltet werden und wie dies mit Kernaktualisierungen funktioniert. Sie haben nichts über das Sichern und Aktualisieren der Datenbank erwähnt. Ich werde versuchen, nichts von goron answer zu kopieren.
Ich habe einen Blogeintrag zu diesem Problem erstellt. Aktualisieren des Drupal-Kerns auf Ihrer Website mit Git
Alternative Methoden
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 Verzweigungen verwenden . Wenn Sie mit Ihrem Upgrade-Commit zum Master fertig sind, kennzeichnen Sie Ihren Code als 7.x.
quelle
Ich führe das Setup mit zwei Zweigen aus, genau wie das OP: einem Zweig mit nur meinem benutzerdefinierten Code und einem Zweig, der sowohl meine benutzerdefinierten als auch meine Kerndateien enthält. Ich bin auf dieselbe Situation gestoßen: Die ignorierten Kerndateien werden beim Wechseln zwischen Zweigen entfernt.
Am Ende hatte ich zwei identische Git-Verzeichnisse: - eines zum Bearbeiten meines benutzerdefinierten Codes mit den vorhandenen, aber ignorierten Kerndateien, und ich würde niemals zum "vollständigen" Zweig in diesem Verzeichnis wechseln - eines zum Durchführen von Zusammenführungen, so dass ich würde Führen Sie das Umschalten und Zusammenführen der Zweige nur in diesem Verzeichnis durch.
Der Grund, warum ich mich für dieses Setup mit zwei Zweigen entscheide, ist, dass ich alle lokalen Festschreibungen für Core-Dateien auf einfache Weise verfolgen möchte. Es ist einfacher, Core-Mods beim Upgrade von Core-Dateien zu überprüfen und erneut anzuwenden.
quelle