Wie erstelle ich ein "Git Push" -Update für Dateien auf meinem Webhost?

13

Ich habe ein paar Websites, die alle auf dem gleichen Webhosting-Service unter Shared Hosting gehostet werden. Mein Webhost unterstützt Git und ich habe SSH-Zugriff darauf, und ich habe auch Git-Setup auf meinem Laptop.

Ich möchte es so machen, dass wenn ich einen "Git Push Origin Master" mache, er automatisch die Dateien auf meinem Webserver aktualisiert und auch ein Backup der Dateien des vorherigen Commits speichert, so dass ich einfach ein Rollback durchführen kann, wenn ich möchte. Ist das möglich?

Ryan
quelle
Neugierig - wer ist Ihr Hosting-Anbieter?
Benutzer
Und warum sollten Sie eine "Sicherung der Dateien des vorherigen Commits" wünschen? Sie können einfach das vorherige Commit drücken, wenn Sie einen Rollback durchführen möchten (vorausgesetzt, Sie wissen immer, was Sie zuletzt gedrückt haben - aber das sollten Sie trotzdem wissen).
sleske

Antworten:

12

Dies wird in Verwenden von Git zum Verwalten einer Website zusammengefasst

Der Schlüssel zu diesem Prozess ist der serverseitige Hook "post-receive" (weitere Informationen zu Git-Hooks finden Sie unter Anpassen von Git - Git Hooks und in der Manpage zu Githooks ). Dieser Hook wird ausgeführt, nachdem der Server alle Daten empfangen hat.

Sobald der Server die Daten empfangen hat, wird er ausgeführt. git checkout -f Die Option -f erzwingt ein Auschecken an den Kopf, auch wenn lokale Unterschiede bestehen.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Stellen Sie das in das hooks/Verzeichnis als post-receiveund ausführbar. Natürlich ändert sich der Pfad dahin, wo Sie die Dateien Ihres Webservers haben (die Verwendung von GIT_WORK_TREElegt die Umgebungsvariable fest, so dass Sie keine Punktedateien und Git-Einstellungen auf dem Server jonglieren müssen).

Zum Zurücksetzen sollte jedes Release mit einem Tag versehen werden (dies kann auch als Teil des Post-Commit-Hooks erfolgen). Durch Markieren der Version kann man leicht die Stelle identifizieren, an der ein Rollback durchgeführt werden soll. Dies beinhaltet jedoch wahrscheinlich die Anmeldung beim Server und das Auschecken dieser Markierung.


quelle
Es sollte beachtet werden, dass dies bedeutet, dass Sie git als Bereitstellungstool verwenden, wofür es eigentlich nicht gedacht ist. Es kann funktionieren, aber es gibt zahlreiche Einschränkungen (das Herunterladen des gesamten Repos, das Aufrufen von Skripten oder das Verwalten von Dateiberechtigungen sowie das Entpacken von Dateien sind nicht erforderlich ...). Es ist wahrscheinlich besser, ein geeignetes Bereitstellungstool zu verwenden.
sleske
@sleske Das alles kannst du mit dem post-receiveHook machen, der eigentlich nur ein Skript ist, in dem du alles einfügen kannst, was du willst.
Mario
@Mario: Ja, Sie können - was bedeutet, dass Sie Ihre eigene Bereitstellungslösung effektiv als Post-Receive-Hook implementieren. Es gibt immer noch Vorteile bei der Verwendung einer vorhandenen Lösung, aber manchmal ist es am besten, die Lösung selbst zu erstellen ...
sleske
Sie können sogar in einen Zwischenordner auschecken und Links vom Webordner zum Zwischenordner haben, um zu vermeiden, dass sich .git-Dateien in Ihrem Webordner befinden.
Bent
0

Die einfachste Methode zum Aktualisieren des Arbeitsbaums des Repositorys, auf das Sie pushen, ist die Einstellung git config receive.denyCurrentBranch updateInstead auf der Empfängerseite. Siehe https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

Ryans Antwort mit Post-Commit-Hooks ist insofern besser, als es das Auschecken an einen anderen Ort ermöglicht (wahrscheinlich möchten Sie das .git nicht in Ihrem Webordner haben). Aber auf dieser Ebene ist es möglicherweise eine gute Idee, ein vorhandenes Bereitstellungstool zu verwenden, wie in den Kommentaren von sleske angegeben.

Echsecutor
quelle