WordPress

Webentwicklung mit Git als Versionsverwaltung

Die Arbeit an einem mittleren oder grösseren Webprojekt ist anspruchsvoll und mitunter auch chaotisch. Neben kurzen Releasezyklen sowie unterschiedlichsten Komponenten und Schnittstellen gilt es auch, verteilte Teams zu koordinieren, geänderte Anforderungen umzusetzen und diese schlussendlich zu veröffentlichen. Der Quellcode und die zugehörigen Dateien sind somit ständigen Änderungen unterworfen. Um den Überblick nicht zur verlieren und um effizientes Arbeiten zu ermöglichen, bedarf es eines Systems zur Versionsverwaltung. Nur so wissen alle Beteiligten, wer wann welche Änderungen vorgenommen hat, wobei notfalls auf eine stabile Version zurückgesprungen werden kann. Eines der beliebtesten Tools in diesem Bereich ist Git. Doch wie funktioniert das smarte Tool von Linux Torvalds, warum ist Git besonders im Bereich der Webentwicklung so populär und welche Herausforderungen müssen Entwickler meistern, wenn Sie Git für das automatische Deployment auf einem Live-Server nutzen möchten?

  1. Git
  2. Besonders in Webentwicklung
  3. Stärken
  4. Basics
  5. Automatische Veröffentlichungen
  6. Herausforderungen
  7. Fazit

1. Was ist Git?

Bei Git handelt es sich um ein dezentrales und verteiltes System zur Versionsverwaltung. Ursprünglich wurde das Tool von Linux-Initiator Linus Torvalds entwickelt, um den Quellcode des Linux-Kernels zu verwalten. Heutzutage ist Git als Open-Source-Software unter der GNU General Public License frei verfügbar und gilt sowohl bei professionellen Entwicklern als auch bei coolen Kids als eines der beliebtesten Versionsverwaltungssysteme. Im Gegensatz zu zentralen Systemen, wie beispielsweise Subversion (SVN), arbeitet Git nicht mit fortlaufenden Änderungslisten, sondern mit Schnappschüssen des Gesamtsystems. Dabei verfügt jedes Teammitglied über eine vollständige Kopie der Version am lokalen Rechner. Kommt es zu Änderungen, werden diese zuerst lokal getestet und eingecheckt und erst dann auf den Server übertragen und allen anderen Beteiligten zur Verfügung gestellt. Das ermöglicht Entwicklern flexibles und komponentenbasiertes Arbeiten, unabhängig von Zeit und Ort. 

2. Warum ist Git besonders in der Webentwicklung so beliebt?

Agile Ansätze, kurze Releasezyklen und internationale Teams kennzeichnen Projekte im Bereich der Webentwicklung. Dabei sind die Entwickler oftmals über den gesamten Erdball verstreut und nicht jeder ist jederzeit online. Git unterstützt diese Umstände und genau das ist eine der grössten Stärken des Tools. Zum einen verfügt jedes Teammitglied über ein eigenes Repository und kann lokal an Änderungen arbeiten und diese überprüfen. Erst wenn die Änderungen getestet sind, werden diese veröffentlicht und synchronisiert. So lassen sich Quellcodes einfach austauschen und alle Arbeitsschritte klar nachvollziehen. Zum anderen ist es aber auch möglich, Änderungen mit der Hilfe des Versionsverwaltungssystems direkt auf einem oder mehreren Live-Servern zu veröffentlichen. Diese Art der Automatisierung ist für Entwickler und Kunden nicht nur überaus praktisch und komfortabel, sondern spart zudem viel Zeit, da es den Wartungsaufwand von Webseiten und Applikationen auf ein Minimum reduziert.

3. Die Stärken von Git im Überblick

Git zählt nicht nur zu einem der verbreitetsten Versionsverwaltungssysteme, sondern auch zu einem der schnellsten. Das ist einerseits dem Umstand geschuldet, dass das lokale Repository Netzwerkzugriffe grösstenteils überflüssig macht. Zum anderen ist das mächtige Tool überaus effizient programmiert und komplett in Cgeschrieben. So kommt es auch bei vielen Commits nur selten zu Wartezeiten. Git hat jedoch noch eine Reihe weiterer Vorteile.

Aktive Community

Git verfügt über eine ausserordentlich aktive Community, wodurch bei Problemen schnelle Hilfestellung geboten wird. Zudem gibt es eine grosse Anzahl an Tutorials, Videos und Foren in den unterschiedlichsten Sprachen, sodass Teammitglieder aus verschiedenen Ländern sich rasch und umfassend in die Materie einarbeiten können.

Verteilte Entwicklung

Eine verteilte Entwicklung vereinfacht die Skalierung und erhöht die Ausfallsicherheit. So können Entwickler Änderungen auch dann einchecken, wenn andere Teammitglieder Teile des Quellcodes beschädigt haben. Zudem lassen sich während der Programmierung Zwischenstände auch ohne aufrechte Internetverbindung einfach versionieren.

Agile Entwicklung

Immer mehr Webprojekte setzen auf agile Entwicklung mit kurzen Releasezyklen. Dabei ermöglicht Git die Entwicklung von Features und Komponenten, losgelöst vom Gesamtprojekt. So werden Entwickler dazu ermutigt, auch kleine Änderungen mit dem Team zu teilen, wodurch neue Releases oftmals weitaus mehr Features und Bugfixes beinhalten als Veröffentlichungen, die auf monolithischen Entwicklungsansätzen beruhen. 

Verteilte Sicherungskopien

Jeder Entwickler verfügt über eine lokale Kopie des Projekts. Diese Kopie kann als zusätzliches Backup angesehen werden. Gibt es Probleme auf einem lokalen Rechner oder Server, so stehen innerhalb des Teams im Notfall weitere Kopien zur Verfügung, auf die bei Bedarf zurückgegriffen werden kann. 

Git Hosting

Wer keinen eigenen Git Server für seine Projekte einrichten möchte, kann auf einen der zahlreichen Hosting-Anbieter zurückgreifen. Einer der bekanntesten Hosting-Anbieter ist die Open Source Hosting Plattform GitHub, die laut eigenen Angaben weltweit mehr als 28 Millionen Nutzer zählt. ( 8 )

Branching und Merging

Es können unterschiedliche Branches für jedes Feature oder Entwicklungsthema angelegt werden. Git führt die Änderungen weitgehend selbstständig zusammen, sofern die Änderungen unterschiedliche Dateien betreffen oder sich an unterschiedlichen Stellen befinden. Dabei wird das Zusammenführen einzelner Branches in der Git History dokumentiert, sodass jeder darüber informiert ist, welche Änderungen bereits zusammengefügt wurden.

4. Ändern, vormerken und sichern – Die Basics in aller Kürze

Dateien in Git verfügen über vier Hauptzustände, die jeder Entwickler kennen sollte. Die wichtigsten Zustände sind:

  • Neu (Untracked)
  • Geändert (Modified)
  • Vorgemerkt (Staged)
  • Gesichert (Commited)

Erstellt ein Entwickler eine neue Datei, so wird diese vom System als untracked erkannt. Analog erkennt Git geänderte Dateien, die nach einer Änderung als modified gekennzeichnet werden. Um die Dateien einzuchecken, wird der Befehl git add verwendet. Dieser merkt sich die ausgewählten Dateien und Ordner für das nächste Commit vor und stellt die Daten in die sogenannte Staging Area. Um die Dateien zu sichern, muss der Befehl git commit ausgeführt werden. Dieser Befehl sichert die Dateien in der lokalen Datenbank. Zusätzlich erscheinen die Dateien im Sourcetree der Git History. Die History kann wiederum über das Kommando git log überprüft werden. Zu diesem Zeitpunkt sind die Änderungen lediglich lokal. Erst wenn der Entwickler die Änderungen über die Synchronisierung am Server anstösst, können die Änderungen von allen Projektmitgliedern abgerufen werden.

Die Hauptbereiche

Um die Hauptzustände zu realisieren, verfügt jedes Projekt in Git über ein sogenanntes Git Verzeichnis, ein lokales Arbeitsverzeichnis und eine Staging Area. Das Git Verzeichnis gilt als Herzstück und wichtigster Teil von Git. Es ist jener Ort, an dem die Metadaten sowie die lokale Datenbank des Projekts gespeichert werden. Dieser Bereich ist auch genau der Teil, der kopiert wird, wenn ein Repository von einem anderen Rechner geklont wird. Im Gegensatz dazu handelt es sich beim Arbeitsverzeichnis um eine spezifische Version des Quellcodes. Die Daten für diesen Bereich werden aus der komprimierten Datenbank bezogen und dann auf die Festplatte gespeichert. Alle neuen Dateien und Änderungen in diesem Verzeichnis wurden noch nicht übertragen und auch nicht zur Übertragung vorgemerkt. Die Staging Area ist schlussendlich lediglich eine einfache Datei, die oftmals auch als Index bezeichnet wird. Alle Änderungen, die für das nächste Commit vorgemerkt wurden, werden in der Staging Area gespeichert. 

Wie werden die Daten synchronisiert?

Da das gesamte Repository lokal repliziert wird, haben Entwickler die Möglichkeit, unterschiedliche Versionen des Projekts lokal zu speichern, Speicherpunkte mit dem Team abzugleichen und Änderungen über den Git-Server in die Hauptversion des Projekts zu übertragen. Dabei lassen sich die verschiedenen Änderungen unterschiedlicher Entwickler einfach auf Knopfdruck zusammenführen. Git synchronisiert die Änderungen über HTTPS oder SSH, wobei auch eigene Protokolle zwischen lokalen Rechnern verwendet werden können. Ein zentraler Server ist somit nicht notwendig. Zudem erlaubt Git eine Übertragung nur, wenn keine weitere Übertragung ansteht. Dadurch kommt es zu keinen Blockaden aufgrund unterschiedlicher Commits verschiedener Teammitglieder. Jeder Entwickler ist vielmehr dazu angehalten, die aktuellste Version in seinem lokalen Repository mit den Änderungen zusammenzuführen. So kann kein Code in die Hauptversion gelangen, der nicht mit dem bestehenden Code zusammenpasst. 

5. Automatische Veröffentlichungen auf Live-Servern

Mithilfe von Git ist es möglich, automatische Deployments auf einem Live-Server vorzunehmen. So lassen sich wichtige Change Requests oder dringend benötigte Fehlerkorrekturen schnell ausrollen, ohne zusätzlichen Aufwand zu generieren. Voraussetzung dafür ist ein lokaler Entwicklungsserver mit Git. Auf diesem werden die notwendigen Änderungen initial eingecheckt und überprüft. Wird die Live-Datenbank auf die lokale Datenbank gespiegelt, kann hierbei sogar mit Echtdaten getestet werden. Waren die Tests erfolgreich, können sämtliche Änderungen auf einen oder mehrere Staging-Server übertragen werden. Hier erfolgt eine erneute Überprüfung der Gesamtversion. Von diesem Bereich aus gelangen die Aktualisierungen schlussendlich auf den oder die Live-Server. Damit das Zusammenspiel reibungslos funktioniert, müssen jedoch sowohl die Konfiguration als auch die Synchronisierung perfekt aufeinander abgestimmt sein. Im ersten Schritt ist es dabei notwendig, Prozesse zu definieren, die die einzelnen Stages synchron halten. Zudem müssen die unterschiedlichen Versionen über Branches und Tags gepflegt werden. Je nach Grösse und Komplexität des Systems ist der Erstaufwand beachtlich und benötigt Erfahrung und Expertenwissen.

6. Herausforderungen bei der Veröffentlichung am Live-Server

Aufgrund der unterschiedlichen Systeme, Konfigurationen und Settings gibt es keine einheitliche Lösung, die für alle Anwendungsgebiete eingesetzt werden kann. Zudem ist die Realisierung immer abhängig von den verwendeten Sprachen, den Zugriffsrechten sowie den Anforderungen des Kunden. Prinzipiell bildet Git jedoch den Grundstein dafür, ein bequemes und automatisches Deployment auf dem Live-Server zu ermöglichen. Die wichtigsten Herausforderungen, denen sich Entwickler in diesem Zusammenhang stellen müssen, haben wir nachstehend für Sie zusammengefasst.

Unterschiedliche Daten

Die lokale Datenbank und die Testdatenbank verfügen in der Regel über andere Daten und andere Konfigurationen, wie beispielsweise Domain Namen oder Pfade. Eine einfache Kopie der Datenbank auf die Live-Datenbank oder eine Spiegelung der Live-Datenbank auf die lokale Datenbank kann hierbei zu Problemen führen. Abhängig vom System, auf welchem die Applikation gehostet wird, kann es zudem weitere Probleme geben. So serialisiert WordPress beispielsweise einige Daten, wodurch es schwierig ist, bestimmte Werte zu verändern oder zu parsen.

Grosse Datenbanken

Je grösser die Datenbanken sind, desto aufwendiger gestaltet sich die Synchronisierung. So müssen die Dateien, Bilder und Videoinhalten zuerst in ein lokales Dateisystem geladen werden. Danach gilt es, alle Datenbankreferenzen passend zu aktualisieren. Zusätzlich müssen alle Dateien, die sich mit Themes oder Pluginsbeschäftigen, korrekt synchronisiert und konfiguriert werden. 

Unterschiedliche Installationen und Teams

Eine Synchronisierung ist wesentlich einfacher, wenn nur ein Entwickler an einem System arbeitet und die geänderte Version nur auf einem einzigen Live-Server veröffentlicht wird. Je mehr Entwickler und Teams an einer Software arbeiten und je mehr Staging-Server und Live-Server synchronisiert werden müssen, desto komplizierter ist das initiale Setup und die Wartung des Systems.

Es ist gefährlich

Wenn die Synchronisierung fehlschlägt und die Version dennoch am Live-Server veröffentlicht wird, kann das gravierende Folgen haben. Korrupte Daten können das System zerstören oder Hackern Tür und Tor öffnen. Nur durch regelmässige Backups der lokalen Datenbank und der Live-Datenbank können im Falle eines Problems die Daten sicher wiederhergestellt werden.

7. Fazit

Git gilt zu Recht als eines der beliebtesten Systeme zur Versionsverwaltung. Das mächtige Tool ist in den letzten Jahren zum de facto Standard der Branche aufgestiegen und verbreitet sich dank einer aktiven Community und zahlreichen Tutorials und Videos in Windeseile. Dabei führt der Einsatz von Git zu mehr Transparenz, einer effizienteren Arbeitsweise und schafft nachhaltig weitaus mehr Sicherheit. Dennoch fällt der Einstieg vielen Entwicklern anfangs schwer. Besonders das Veröffentlichen neuer Versionen auf einem Live-Server benötigt viel Erfahrung und Expertise. 

Sind Sie neugierig geworden und möchten Sie mehr über Git erfahren oder haben Sie Fragen, wie Sie Git für das Veröffentlichen neuer Versionen auf Ihrem Live-Server verwenden können? Dann kontaktieren sich uns ganz einfach. Unser Team nimmt sich für Sie Zeit und berät Sie gerne!