Wenn irgendwann alle Tests für eine Webseite abgeschlossen sind, muss sie auf den Webserver deployt werden. Das erfolgt in der Regel über FTP. Es geht aber auch einfacher, wenn man auf dem Webserver git installiert hat.
Auf dem Webserver wird ein bare-Repository angelegt. In diesem gibt es einen Branch production
, der die Produktionsversion der Webseite hält. Nach jedem push in das Repository auf dem Webserver wird der production
-Branch automatisch in das Webseitenverzeichnis ausgecheckt.
Das Bare-Repository
Auf dem Webserver wird das leere Repository angelegt.
cd repositories
mkdir webseite.git
cd webseite.git
git init --bare
Das lokale Repository
Als nächstes wird das Bare-Repository in ein lokales Verzeichnis geklont. Der Vorteil ist, dass damit die remotes bereits konfiguriert werden:
git clone ssh://..../webseite.git
Nun kann man erstmal auf dem Repository arbeiten und dann den Arbeitsstand comitten bzw. pushen.
z.B.
git add "index.php"
git commit -m"Initialisierung"
Der Branch production
muss noch angelegt werden:
git branch production
Hat man irgendwann einen Produktionsstand erreicht, kann in den Branch production
gewechselt werden und der Stand vom master
-Branch (oder einem Tag etc.) gemergt werden.
git checkout production
git merge master
Dann wird alles auf den Webserver in das Bare-Repository gepusht.
git push origin master production
Das Repository auf dem Webserver
Zuerst wird das repository in das Verzeichnis geklont. Anschließend wird der aktuelle Stand des production
-Branches ausgecheckt.
git clone ../../repositories/webseite.git
cd webseite
git pull origin production
Der Hook
Nun soll genau das automatisch passieren. Dafür gibt es in jedem repository einen post-receive-hook
. Hierbei wird die Datei webseite.get/hooks/post-receive
nach einem push ausgeführt. Der Inhalt sieht also so aus:
#!/bin/sh
cd ~/webseite || exit
unset GIT_DIR
git pull origin production
Es ist wichtig, dass diese Datei auch als ausführbar markiert ist.
Nach dem Anlegen des Hooks muss noch kontrolliert werden, ob er tatsächlich funktioniert.