Versionsverwaltungssysteme
Aufgaben
Die Versionsverwaltung umfasst folgende Aufgaben:
- Die Änderungen protokollieren, um nachzuvollziehen, wer wann etwas an der Software geändert hat.
- Die Stände einzelner Dateien wiederherstellen, um versehentliche Änderungen aufzuheben.
- Die einzelne Stände eines Projekts archivieren, um allzeit auf alle Versionen zugreifen zu können.
- Den gemeinsamen Zugriff von mehreren Entwicklern auf eine Datei koordinieren.
- Die Entwicklung mehrere Entwicklungszweige eines Projektes gleichzeitig zu ermöglichen.
Begriffe
Im Zusammenhang mit Versionsverwaltung-Tools werden immer wiederkehrende Begriffe verwendet, die im Folgenden erklärt werden sollen.
Branch
Branch bedeutet auf Deutsch Zweig und definiert die Verzweigung zu einer neuen Version des Projekts, welche es ermöglicht, dass unterschiedlichen Versionen parallel weiterentwickelt werden können.
Merging
Merging bedeutet verschmelzen. Merging wird der Vorgang genannt, der geschieht, wenn vorgenommen Änderungen an einem Branch in einen anderen einfließen.
Trunk, Master
Ein Hauptentwicklungszweig wird häufig als Trunk oder Master bezeichnet.
Fork
Wenn ein Branch in einen neuen, unabhängigen Versionsverwaltung erstellt wird, ist dies ein Fork.
Repository
Ein Repository, verkürzt auch Repo genannt, bedeutet auf Deutsch Behälter bzw. Aufbewahrungsort und beschreibt innerhalb der Versionsverwaltung das Projekt in dem die entsprechenden Dateien abgelegt sind.
Commit
Wenn eine neue Version eines Branches bei der Versionsverwaltung vorgelegt wird, wird dieser Vorgang als Commit beschrieben. Der Entwickler hat einen Programmierung an einer Software fertiggestellt und „committed“ (übergibt) seine Änderungen.
Funktionsweise
Damit jeder Entwickler mit den im Repository abgelegten Dateien arbeiten kann, kann er durch das Versionsverwaltung-Tool auf den aktuellen Stand des Projekts zugreifen. Dieser wird durch einen Verzeichnisbaum bzw. durch eine Arbeitskopie abgebildet, der aus den Daten erstellt werden kann.
In einem Versionsverwaltungssystem werden diese Arbeitskopien dann mit den vorhandenen Daten im Repository synchronisiert.
Die Arbeitskopie und das Repository bedingen sich gegenseitig. So ist es möglich, dass Versionen aus dem Repository in die Arbeitskopie übertragen werden (Checkout) oder Versionen aus der Arbeitskopie ins Repository überführt werden (Commit).
Arbeitsweisen
In Versionsverwaltungssystemen kann auf unterschiedliche Weisen an Projekten gearbeitet werden:
Lock Modify Write
Diese Arbeitsweise wird auch Lock Modify Unlock genannt. Ihre Basis findet Lock Modify Write in der pessimistischen Versionsverwaltung.
Vor einer Änderung durch den Anwender müssen die zu bearbeitenden Dateien gesperrt und nach der Änderung wieder zugänglich gemacht werden. Während der Sperrung der Daten, können keine anderen Benutzer Änderungen daran vornehmen.
Der Vorteil liegt darin, dass das Zusammenführen der einzelnen Versionen ausbleibt, da nur ein Benutzer an einer Datei arbeiten und sie ändern kann.
Nachteilig ist daran, dass es vorkommen kann, auf die Freigabe eines Dokuments zu warten, um Änderungen auszuführen.
Copy Modify Merge
Um die Nachteile der pessimistischen Versionsverwaltung auszugleichen, wurde die optimistische Versionsverwaltung mit der Arbeitsweise des Copy Modify Merge konzipiert.
Durch dieses Konzept ist es möglich, eine Datei gleichzeitig durch mehrere Benutzer zu ändern. Im Anschluss daran findet ein automatisches oder manuelles Merging (Zusammenführung) der Versionen statt.
Ein Vorteil bietet diese Arbeitsweise vor allem in puncto Effizienz. Die geplanten Änderungen müssen nicht im Voraus bekannt gegeben werden. Der direkte Kontakt zwischen den Entwicklern entfällt.
Binärdaten, also Dateien, die keine Textdateien darstellen, sondern aus beliebigen Bitmustern (festgelegte Zuordnung zu einem Zeichen oder einer Zeichenfolge) bestehen, können nur mit dem passenden Werkzeug automatisch zusammengeführt werden. Für das Konzept Copy Modify Merge stellt dieser Umstand in einigen Fällen einen Nachteil dar.
Arten der Versionsverwaltung
Es bestehen drei Arten der Versionsverwaltung:
Lokale Versionsverwaltung
Die lokale Versionsverwaltung findet lokal auf einem Computer statt. Dabei wird häufig nur eine einzige Datei versioniert und verwaltet.
Zentrale Versionsverwaltung
Diese Art der Versionsverwaltung funktioniert mithilfe eines zentralen Archivs in Form eine Client-Server-Systems. In diesem System werden Aufgaben und Dienstleistungen innerhalb eines Netzwerkes verteilt und von Programmen ausgeführt, die Clients und Server darstellen können. Der Client fordert einen Dienst vom Server an. Der Server, dessen Standort auf demselben oder einem anderen Rechner im Netzwerk ist, antwortet auf die Anfrage des Client. Der Server ist in der Lage, auf mehrere Anfragen von mehreren Clients zu antworten.
Über Netzwerke kann auf ein Repository zugegriffen werden. Nur berechtigten Personen ist es gestattet, neue Versionen in das Archiv zu legen.
Verteilte Versionsverwaltung
In der verteilten Versionsverwaltung besteht der Unterschied zum lokalen und zentralen System darin, dass kein zentrales Repository mehr vorhanden ist. Jeder Entwickler, der an einem Projekt arbeitet, besitzt dafür sein eigenes Repository und kann dies mit allen beliebig anderen anpassen.
Die Änderungen können lokal nachvollzogen werden, ohne dass dabei eine Verbindung zum Server hergestellt werden muss.
Beispiele Versionsverwaltung-Tools
MediaWiki
Ein Beispiel für ein zentrales System, welches auf der Grundlage von Open Source vertrieben wird, ist MediaWiki.
MediaWiki ist frei verfügbar und für Inhalte konzipiert, die in Form eines Wiki-Systems dargestellt werden. Jeder Benutzer kann die Inhalte über den Browser (Computerprogramme zur Darstellung von Webseiten) ändern.
MediaWiki wurde für Wikipedia entwickelt und steht unter der GPL-Lizenz. MediaWiki kann somit von Nutzern ausgeführt und von Entwicklern durch die Offenlegung des Quelltextes verändert und verbreitet werden. Neben Wikipedia und weiteren MediaWiki-Projekten, nutzen zahlreiche Organisationen, Unternehmen und Institutionen MediaWiki.
Entstanden ist MediaWiki aus einer Wiki-Engine. Die Engine ist ein Teil eines Computerprogramms, welcher eigenständig für Berechnungen oder Simulationen zuständig ist. Sie läuft meist im Hintergrund und muss nicht gesteuert werden.
Die erste Version, die von Magnus Manske entwickelt wurde, fand im Januar 2002 erstmals Anwendung. Im Juli 2003 wurde sie final als MediaWiki bezeichnet.
Apache Subversion
Auch Apache Subversion gilt als ein zentrales Versionsverwaltungssystem. In einem zentralen Projektarchiv finden die Versionierungen statt.
An der Namensgebung des Versionsverwaltungssystems war vor allem der Software-Entwickler Jim Blandy beteiligt. Subversion bedeutet ins Deutsche übersetzt so viel wie Unterversion oder frühere Version.
Zunächst wurde das System seit Beginn des Jahres 2000 bei einer Softwarefirma namens CollabNet entwickelt und wechselte im Jahre 2009 zur Apache Software Foundation.
Apache Subversion ist eine freie Software. Das bedeutet, dass die Nutzer ebenfalls die Nutzungsrechte der Anwendung erhalten und diese in keiner Weise beschränkt werden.
Git
Ein Beispiel für ein verteiltes Versionsverwaltungs-Tool ist Git, welches von Linus Torvalds initiiert wurde. Er gilt als Entwickler der Open Source Software Linux und begann im April 2005 eine neue Versionsverwaltung zu entwickeln. Sie sollte das System BitKeeper ersetzen, welches durch eine Lizenzänderung von Entwicklern nicht mehr kostenlos verwendet werden konnte.
Der Name Git wird in England als ein umgangssprachlicher Ausdruck für „Blödmann“ genutzt und unter anderem deshalb von Torvalds gewählt, weil er in der Softwarewelt noch ungenutzt war.
Git ist an der Entwicklung vieler Projekte beteiligt, die kommerziell sind, aber dem Open Source Bereich zugeschrieben werden können.
Git wird zum Beispiel auf Plattformen wie GitHub und GitLab eingesetzt.
GitHub ist eine Webanwendung für die Versionierung von Software-Entwicklungsprojekten. Es wurde von den Programmierern Wanstrath, Hyett, Chacon und Preston-Werner entwickelt und startete im Februar 2008.
Auf GitHub werden nicht die Projekte und deren Quellcodes in den Vordergrund gestellt, sondern die Nutzer und ihre Repositories. Das Erstellen von öffentlichen und privaten Repositories ist möglich, nachdem eine kostenlose Registrierung erfolgt.
GitLab leitete sich bezüglich der Namensgebung ebenfalls von Git ab und ist so wie GitHub eine netzbasierte Anwendung für Software-Projekte. Die Entwicklung erfolgte 2011 durch die Ukrainer Saparoschez und Sizov unter Verwendung der Programmiersprache Ruby on Rails.
Fossil
Ein weiteres verteiltes System zur Versionsverwaltung stellt Fossil dar. Es wurde vornehmlich von dem Programmierer Richard Hipp entwickelt und erschien im Jahre 2006 auf dem Markt. Die Namensgebung verdeutlicht ein Hauptmerkmal das Systems, indem alle Änderungen, die an Software unternommen wurden, für immer rekonstruierbar sein sollen.
Es enthält Funktionen wie ein integriertes Wiki, ein integriertes Forum und einen integrierten Bugtracker für die Programmfehlererfassung.
TenMedia - Softwareagentur im Herzen von Berlin
TenMedia besteht seit 2011 und arbeitet seitdem an der technischen Entwicklung von Websites, Apps und Datenbanken. Mit modernsten Technologien entwickeln wir state-of-the-art Produkte und tragen so einen Teil zur digitalen Transformation in Deutschland bei. Außerdem bieten wir weitere Dienstleistungen wie Webdesign, Hosting und Wartung an und betreuen und managen Portale.
Für kleine und mittelständische Unternehmen, aber auch für Start-ups können wir eine langfristige Zusammenarbeit anbieten.
Sie haben eine spannende Idee? Es fehlt Ihnen jedoch die passende Umsetzung? Rufen Sie uns gerne an oder schreiben Sie uns eine Mail.