Eine Versionsverwaltung dokumentiert die Entwicklung deines Spieleprojekts. Sie speichert nicht nur den aktuellen Stand von Dateien, sondern hält frühere Änderungen nachvollziehbar fest. Dadurch kannst du untersuchen, wann sich etwas verändert hat, ältere Fassungen wiederherstellen und gemeinsam mit anderen an einem Projekt arbeiten.
Was ist eine Versionsverwaltung?
Während der Spieleentwicklung verändern sich Dateien ständig. Du ergänzt Programmcode, überarbeitest Texturen, passt Level an oder ersetzt Audiodateien. Ohne Versionsverwaltung würde die jeweils neue Datei häufig einfach den vorherigen Stand ersetzen.
Eine Versionsverwaltung zeichnet diese Änderungen strukturiert auf. Abhängig vom eingesetzten System kannst du beispielsweise nachvollziehen, welche Datei verändert wurde, wann die Änderung erfolgte und wer sie vorgenommen hat. Zusätzlich lässt sich eine Beschreibung hinterlegen, die den Zweck einer Änderung erklärt.
Warum ist die Änderungsgeschichte wichtig?
Funktioniert dein Spiel plötzlich nicht mehr, obwohl ein früherer Stand problemlos lief, kannst du beide Versionen miteinander vergleichen. Auf diese Weise lässt sich der Zeitraum eingrenzen, in dem der Fehler entstanden sein könnte.
Angenommen, eine Tür in deinem Spiel ließ sich gestern noch öffnen. Nach mehreren Änderungen reagiert sie heute nicht mehr. Die Versionsgeschichte zeigt dir, welche Dateien zwischen dem funktionierenden und dem fehlerhaften Stand verändert wurden. Vielleicht wurde die Interaktionslogik angepasst oder die Abfrage des benötigten Schlüssels verändert.
Damit kennst du noch nicht automatisch die Ursache. Die Versionsverwaltung liefert zunächst Hinweise darauf, welche Änderungen für die weitere Fehlersuche interessant sein könnten. Anschließend kannst du diese gezielt beim Debugging untersuchen.
Ältere Versionen bleiben erreichbar
Ein weiterer Vorteil liegt darin, dass frühere Entwicklungsstände nicht einfach verloren gehen. Stellt sich eine Änderung als problematisch heraus, kannst du auf Informationen aus der Versionsgeschichte zurückgreifen und je nach System frühere Fassungen einer Datei wiederherstellen.
Das ist sicherer als eine Sammlung manuell angelegter Dateien mit Namen wie „Spiel_neu“, „Spiel_neu2“ oder „Spiel_final_wirklich_final“. Die Versionsverwaltung ordnet die einzelnen Entwicklungsstände systematisch und verknüpft sie mit zusätzlichen Informationen.
Versionsverwaltung ersetzt kein Backup
Trotz gespeicherter Versionsstände solltest du Versionsverwaltung und Datensicherung voneinander unterscheiden. Die Versionsverwaltung dokumentiert die Entwicklung eines Projekts. Ein Backup dient dagegen dazu, Daten gegen Verlust zu sichern.
Beide Verfahren können sich ergänzen. Auch der Server oder Speicherort einer Versionsverwaltung benötigt eine geeignete Sicherungsstrategie.
Versionsverwaltung im Team
Besonders wichtig wird das System, sobald mehrere Personen am selben Spiel arbeiten. Programmierer verändern Quellcode, Artists bearbeiten Modelle und Texturen, während Leveldesigner Änderungen an der Spielwelt vornehmen.
Die Versionsverwaltung schafft einen gemeinsamen Entwicklungsstand und dokumentiert die eingereichten Änderungen. So lässt sich nachvollziehen, welche Dateien zum Projekt gehören und welche Änderungen von einzelnen Teammitgliedern stammen.
Was passiert bei gleichzeitigen Änderungen?
Arbeiten zwei Personen an derselben Datei, können Konflikte entstehen. Bei textbasierten Dateien lassen sich unterschiedliche Änderungen teilweise automatisch oder manuell zusammenführen. Dieser Vorgang wird als Merge bezeichnet.
Bei bestimmten Binärdateien ist das schwieriger. Dazu können beispielsweise 3D-Modelle oder andere Dateien gehören, deren Inhalt nicht sinnvoll Zeile für Zeile verglichen werden kann. Versionsverwaltungssysteme können für solche Arbeitsabläufe deshalb zusätzliche Verfahren wie das Sperren einer Datei anbieten.
Nicht nur Programmcode lässt sich versionieren
Ein Spieleprojekt besteht aus wesentlich mehr als Quellcode. Zur Versionsverwaltung können auch Texturen, 3D-Modelle, Animationen, Audiodateien, Leveldaten, Konfigurationsdateien und weitere Assets gehören.
Als Asset bezeichnet man eine Ressource, die innerhalb des Spiels oder bei seiner Entwicklung verwendet wird. Eine Charaktertextur ist ebenso ein Asset wie ein Musikstück, ein 3D-Modell oder eine Animation.
Gerade diese Mischung stellt Spieleprojekte vor besondere Anforderungen. Während Quellcodedateien häufig klein und textbasiert sind, können Grafiken, Videos, Audiodateien und 3D-Modelle wesentlich mehr Speicherplatz benötigen.
Zentrale und verteilte Versionsverwaltung
Nicht jedes Versionsverwaltungssystem arbeitet nach demselben Prinzip. Grundsätzlich lassen sich unter anderem zentrale und verteilte Ansätze unterscheiden.
Bei einer zentralen Versionsverwaltung befindet sich die maßgebliche Versionsgeschichte auf einem zentralen Server. Teammitglieder verbinden ihre lokalen Arbeitsbereiche mit diesem System. Perforce P4 ist ein Beispiel für einen solchen Ansatz.
Verteilte Systeme wie Git arbeiten anders. Dort kann jede lokale Kopie eines Repositorys – also des verwalteten Projektbestands samt Versionsinformationen – eine eigene vollständige Versionsgeschichte enthalten. Änderungen lassen sich lokal speichern und später mit anderen Repositorys austauschen.
Beide Modelle erfüllen denselben grundlegenden Zweck: Sie machen die Entwicklung von Dateien nachvollziehbar. Arbeitsweise und technische Organisation unterscheiden sich jedoch.
Versionsverwaltung und Builds
Die dokumentierten Entwicklungsstände helfen außerdem dabei, einen Fehler einem bestimmten Build zuzuordnen. Ein Build ist eine ausführbare beziehungsweise testbare Fassung des Spiels, die aus einem bestimmten Projektstand erzeugt wurde.
Stürzt beispielsweise Build 125 ab, während Build 124 funktioniert, kannst du untersuchen, welche Änderungen zwischen den zugrunde liegenden Projektständen liegen. Dadurch verkleinert sich der Bereich, in dem du nach der Ursache suchen musst.
Versionsverwaltung als Teil des Debuggings
Die Versionsgeschichte allein erklärt einen Fehler selten vollständig. Sie wird besonders nützlich, wenn du sie mit anderen Informationen kombinierst. Log-Dateien dokumentieren Ereignisse während der Programmausführung. Ein Stack Trace zeigt die Folge von Funktionsaufrufen zum Zeitpunkt eines Fehlers.
Zusammen können diese Informationen die Suche eingrenzen: Der Stack Trace führt dich zu einem betroffenen Codebereich, das Log zeigt vorausgegangene Ereignisse und die Versionsverwaltung verrät, welche Änderungen dort zuletzt vorgenommen wurden. Anschließend prüfst du die möglichen Ursachen beim Debugging.
Perforce P4 als Beispiel
In der Spieleentwicklung begegnet dir häufig Perforce P4. Das System eignet sich unter anderem für Projekte, in denen Programmcode und große Assets gemeinsam verwaltet werden. Zusammengehörende Änderungen können dabei in sogenannten Changelists organisiert werden.
Eine Changelist fasst mehrere Änderungen zu einer nachvollziehbaren Einheit zusammen. Ändert eine Fehlerkorrektur beispielsweise drei Dateien, können diese gemeinsam eingereicht und mit einer Beschreibung versehen werden. Dadurch bleibt später erkennbar, warum die Dateien zusammen verändert wurden.
Weitere Artikel auf Games und Lyrik
Wenn du dich neben der technischen Spieleentwicklung auch für klassische Adventures interessierst, findest du auf Games und Lyrik weitere Beiträge. In Runaway 3: A Twist of Fate begleitest du Brian und Gina durch ein Point-and-Click-Adventure mit Rätseln, ungewöhnlichen Situationen und einer Geschichte voller Wendungen.
Weitere technische Grundlagen zur zentralen Versionsverwaltung findest du in der offiziellen Perforce-P4-Dokumentation.
