Statamic und Git
Statamic und Git sind eine gute Kombination für ein konsistentes Projektmanagement
Set-up: Teil 1, 5 min.

Nutzt man Statamic out of the Box, dann werden alle Inhalte, Konfigurationen und Designelemente der Webseite als Dateien gespeichert. Dieses sogenannte Flat-File-CMS verzichtet auf eine klassische Datenbank. Da alles in Dateien liegt, bietet sich Git als Werkzeug zum Managen von Veränderungen an. Und zwar nicht nur zur Veränderung des Codes, sondern auch der Inhalte.
Exkurs Git
Git ist ein Werkzeug zum kollaborativen Arbeiten an Textdateien, meist Code. Änderungen können nachvollzogen, verwaltet und zusammengeführt werden. Git ermöglicht es also gemeinsam an Code zu arbeiten und den Fortschritt der Arbeit untereinander auszutauschen.
Git installieren (falls nötig)
Auf den meisten Maschinen von Entwickler:innen ist Git nicht wegzudenken. Hast du es noch nicht bei dir lokal installiert, dann kannst du dies über deinen Packetmanager machen.
sudo apt install git
Single Source of truth
Nach der Installation von Statamic initialisiert man am besten direkt ein neues Git Repository. Danach können Änderungen besser nachvollzogen und verwaltet werden. Git wird dadurch zu einer Single Source of Truth. Alle Informationen, die man benötigt um die Webseite zu starten, sind in Git gespeichert. Von den Inhalten, den Bildern, den Nutzer:innen, den Blueprints, bis zum Code für das Frontend. Arbeiten nun mehrere Entwickler:innen an der Seite, dann reicht es, Änderungen über eine Plattform wie Github oder Gitlab zu teilen. Eine Synchronisierung der Datenbank ist nicht notwendig, genauso wenig wie das Synchronisieren von Assets.
Dieses Vorgehen bietet viele Vorteile. Will man beispielsweise eine lokale Entwicklungsumgebung für ein produktives System hochfahren, dann reicht git clone.
Git initialisieren
Nach der Installation kann mit folgendem Befehl Git lokal initialisiert werden.
cd ein-projekt && git init && git add . && git commit -m "init mein-project"
Am besten synchronisiert man das Projekt auf eine kollaborative Plattform wie Gitlab der Github. Dazu auf der Plattform einloggen, ein Projekt erstellen und die Adresse des Projektes kopieren.
git remote add origin git@gitlab.com:username/projectpath.git
git push origin main
Jetzt können alle Änderungen über den Editor oder das Terminal synchronisiert werden.
Git für Statamic konfigurieren
Damit dies genutzt werden kann, wird Statamic Pro benötigt.
Bis jetzt werden Änderungen nur in Git commited, wenn wir dies manuell im Repository machen. Dies mag für eine Entwickler:innenmaschine sinnvoll sein, aber spätestens wenn wir unser Projekt auf einen Server deployen, wollen wir, dass auch jede Änderung an einem Artikel in Git versioniert wird. Dazu müssen wir Statamic entsprechend konfigurieren.
In der Datei config/statamic/git.php finden sich alle Einstellungsmöglichkeiten für git. Wir führen jedoch unsere Änderungen an der .env Datei durch, da diese nicht in Git integriert ist und nur der lokalen Konfiguration dient.
# .env
# Änderungen werden in git commited
STATAMIC_GIT_ENABLED=true
# Änderungen werden nach dem speichern auf den remote gepushed z.B. gitlab
STATAMIC_GIT_PUSH=true
Wenn wir nun Änderunen im Statamic Backend vornehmen, werden diese automatisch commited und anschliessend auf Gitlab synchronisiert. Cool.
Performance
Bilder oder gar Videos in Git zu speichern ist nicht unbedingt eine gute Idee. Der Umfang des Git Repository wächst schnell und ist nicht mehr einfach handhabbar. Für jedes Bild, das in Statamic hochgeladen wird, erstellt Git ein Objekt von derselben Grösse. Für kleinere Seiten ist dies kein Problem und hinnehmbar. Es spielt keine grosse Rolle, ob das Repo 100mb oder 500mb gross ist. Wächst der Umfang des Repositories aber auf mehrere Gigabytes an, dann treten Performanzprobleme auf. Pull und Push werden langsamer, ein initialer clone wird um ein vielfaches länger dauern.
Git-LFS kann hier Abhilfe schaffen und das Repository wieder handhabbarer machen. Dabei wird anstatt des gesamten Bildes nur eine Referenz auf das Bild in Git gespeichert. Dieses kann dann bei Bedarf (z.B. git clone) von einem Server heruntergeladen werden. Dadurch wird das Repository massiv verkleinert und wieder managebar.
Am einfachsten ist es, man konfiguriert Git-LFS zu Beginn eines Projektes. Nachträglich Git-LFS zu aktivieren ist aufwändiger.
# Git LFS im repository installieren
git lfs install
# Git LFS für die Dateien mit folgenden Änderungen aktivieren
git lfs track *.jpg *.jpeg *.png *.pdf *.gif
git add .gitattributes
# Vorsicht: Dies nur ausführen, wenn Git LFS auf ein bereits bestehendes Repository angewendet werden soll. Vorgängig abklären, ob dies so in deinem fall funktioniert
git lfs migrate import --everything –include="*.jpg,.jpeg,.png,.pdf,.gif" –verbose
# Vorsicht: Nun muss Git gepushed werden
git push origin --force