Versionskontrolle mit Spieleentwicklung - Wann soll ich verzweigen?

26

Ich habe kürzlich begonnen, die Versionskontrolle für meine Projekte zu verwenden (obwohl ich alleine daran arbeite). Ich finde, dass es eine gute Möglichkeit ist, den Verlauf des gesamten Entwicklungsprozesses (mit Fehlerverfolgung) zu verfolgen und Backups für meine Projekte zu erstellen.

Während ich langsam die Funktionen und Vorteile der Versionskontrolle erkenne, stecke ich bei der Idee der Verzweigung fest. Wann soll ich das machen

Sollte es jedes Mal sein, wenn ich ein neues Feature entwickle, oder nur ab und zu, wenn ich einen bestimmten Meilenstein erreiche?

Verzweigungen sind natürlich nutzlos, wenn ich alleine arbeite, aber ich nehme jetzt lieber gute Gewohnheiten an und gewöhne mich daran.

Als ich das Buch Game Coding Complete von Mike McShaffry las (das übrigens ein großartiges Buch ist), war ich total verloren, als der Autor empfahl, drei Zweige beizubehalten.

  • Main : Hauptentwicklungszweig, in dem regelmäßig Änderungen vorgenommen werden.
  • Gold : Gold-Zweig, in dem der letzte erreichte Meilenstein aufbewahrt wird.
  • Recherche : Branch zum Testen von Dingen, die sich negativ auf den Main-Branch auswirken könnten (Ändern wichtiger Komponenten der Game-Engine usw.).

So soll es sein? Wie funktioniert es wirklich in der Welt der Spieleentwicklung mit großen Entwicklerteams?

Grundsätzlich gilt: Wann verzweigt man normalerweise in die Spieleentwicklung (und führt sie zusammen)?

Jesse Emond
quelle

Antworten:

32

Die Verzweigung hängt ein wenig von der VCS-Unterstützung für die Funktion ab (dh, ob das VCS es einfach oder schwierig macht).

Sie möchten jedoch mindestens einen Zweig für jede unabhängig unterstützte Version Ihres Projekts. Das heißt, wenn Sie über "Game 2" und "Game 2 + Expansion" verfügen, die separate Produkte sind, die aus derselben Codebasis erstellt wurden und auf die Sie patchen und Updates ausgeben können müssen, möchten Sie jedes dieser Produkte haben existieren in einer eigenen Verzweigung von der Hauptcodebasis, so dass Korrekturen an der Kerncodebasis unabhängig in jedem dieser Produkte zusammengeführt werden können. (In der Regel werden diese Zweige erstellt, wenn jedes Produkt veröffentlicht wird, oder einige Tage / Wochen zuvor, wenn in der Codebasis Personen an Dingen arbeiten, die Sie mit der Erstveröffentlichung nicht löschen möchten.)

Wenn Sie mit einem VCS arbeiten, das die Verwendung von Zweigen schwierig oder schmerzhaft macht (SourceSafe, svn usw.), sind Sie wahrscheinlich am glücklichsten, wenn Sie für jedes freigegebene Produkt einen Zweig "release" beibehalten und Ihre Hauptentwicklung in "trunk" durchführen. Zusammenführen von Änderungen von "trunk" in die "release" -Zweige, wenn Sie Hotfixes für diese Releases veröffentlichen müssen.

Wenn Sie auf der anderen Seite mit einem der neueren VCS-Systeme arbeiten, die auf Verzweigung und Zusammenführung (Git, Bazaar, Mercurial usw.) basieren, sind Sie wahrscheinlich am glücklichsten, wenn Sie Ihre Entwicklung in kurzer Zeit durchführen -gelebte "Feature" -Zweige. Wenn Sie beispielsweise an der KI-Pfadfindung arbeiten, können Sie eine "Pfadfindungs" -Verzweigung erstellen und den Code dort implementieren. Wenn Sie fertig sind, führen Sie diese Verzweigung wieder in Ihrem Hauptentwicklungsstamm zusammen und löschen (optional) die Verzweigung, in der Sie gearbeitet haben. Der Vorteil dieses Ansatzes besteht darin, dass Sie mehrere Aufgaben gleichzeitig ausführen können, anstatt eine abzuschließen bevor Sie mit dem nächsten beginnen.

In meinem aktuellen Home-Projekt (mit git) sind derzeit fünf verschiedene Feature-Zweige aktiv, die an verschiedenen Features arbeiten. Zwei davon sind alternative Ansätze, um das Gleiche zu tun (für das Profiling), zwei sind experimentelle Ideen für die Spielmechanik und einer ist ein großer Umgestalter meiner KI-Systeme und tatsächlich so kaputt, dass der Code nicht richtig kompiliert werden kann jetzt. Aber es ist in seinem Feature-Zweig als Referenz und als Backup festgeschrieben und es ist kaputt, was mich nicht davon abhält, an den anderen Features zu arbeiten. Diese anderen Feature-Zweige (und auch der Hauptentwicklungs-Trunk) werden weiterhin korrekt kompiliert und ausgeführt.

Nach meiner Erfahrung mit der Entwicklung professioneller Spiele für große Teams stecken wir immer noch hauptsächlich in älteren (und kommerziell unterstützten) Versionskontrollsystemen. Perforce wird wahrscheinlich am häufigsten verwendet, gefolgt von Subversion. Überall, wo ich gearbeitet habe, gab es einen Trunk-Zweig und dann einen separaten Release-Zweig für jedes Ergebnis (Meilenstein / Demo / Release / etc). Gelegentlich macht jemand einen persönlichen Zweig für eine große Veränderung, die er vornimmt oder testet, aber dies ist äußerst selten und normalerweise für Dinge wie "das Spiel so umwandeln, dass es mit dieser anderen Physikbibliothek läuft", die möglicherweise nicht bis zum laufen kommen freigegebenes Produkt.

Trevor Powell
quelle
1
Geniale Antwort. Ich werde ein wenig warten, bevor ich es als akzeptierte Antwort markiere, um zu sehen, ob andere ihr Salzkorn basierend auf ihrer Erfahrung mitbringen werden.
Jesse Emond
8

Bereits eine ausgezeichnete Antwort oben, aber eine Sache, die zu beachten ist, ist, wann Sie verzweigen möchten und wann Sie markieren möchten.

Die meisten vcs erlauben Ihnen das Markieren (manchmal nennen sie es Beschriftung). Sie sollten jedes Mal ein Tag anwenden, wenn Sie einen größeren Build erstellen (entweder für einen Playtest oder einen Betatest oder für eine neu hinzukommende Funktion). Wenn Sie eine Art kontinuierliche Integration verwenden (und dies sollten Sie tun), sollte das CI-System erfolgreiche Builds kennzeichnen. Grundsätzlich können Sie jedes Mal, wenn Sie etwas tun, zu dem Sie zurückkehren möchten (entweder um eine Verzweigung zu erstellen oder um zu überprüfen, wie Sie etwas in dieser Version getan haben), ein Etikett erstellen. Sie sind in der Regel kostengünstig und einfach hinzuzufügen.

Die andere Sache, die ich dringend empfehlen würde, ist, Ihre Assets und Ihren Code im selben Versionssystem zu belassen. Eine Verzweigung (oder ein Tag) von Code ist völlig nutzlos, wenn Sie die Assets nicht zuordnen (und dann verzweigen) können. Dies ist einer der Hauptgründe, warum Spielefirmen Perforce lieben - das Speichern von binären Grafikdateien ist ebenso erfreulich wie das Speichern von Code und (im Gegensatz zu Git) für nicht-technische Typen verständlich!

Oh und wann immer Sie das Gefühl haben, kompilierte Dateien in Ihr VCS einchecken zu wollen, denken Sie darüber nach, wie Sie dies vermeiden können. Nach meiner Erfahrung führt dies fast immer zu inkorrekten Daten, fehlender Quelle (wo zum Beispiel eine komprimierte DDS-Textur eingecheckt wird, aber nicht die Quell-PNG) und Chaos auf der ganzen Linie. Wenn Sie über eine Asset-Pipeline verfügen, für die exportierte Dateien besser zwischengespeichert werden können (damit nicht alle dieselbe Gruppe von Dateien neu generieren), müssen Sie unbedingt die Quell-Assets in Ihrem VCS erstellen und die exportierten Dateien in einer Zwischenablage ablegen Cache (oder gemeinsam genutztes Laufwerk oder sogar ein separates VCS). Aber checke diese exportierten Dateien nicht von Hand ein - es wird dich beißen (besonders wenn du als Teil eines Teams arbeitest).

M Qualle
quelle
+1 für die Diskussion über das Markieren (worüber ich sprechen wollte, aber nicht sicher war, wie ich es erwähnen sollte, ohne noch wortreicher zu werden als ich es bereits war). Ich habe an einer Reihe von Stellen gearbeitet, die diesen Fehler begangen haben, und das führt immer zu Kummer.
Trevor Powell,
1

Ich habe dieses Buch geliebt und kann es jedem mit relevanten Interessen empfehlen. Für One-Man-Indie-Projekte besteht keine Notwendigkeit, überhaupt zu verzweigen, es sei denn, Sie benötigen oder möchten separate Versionen erstellen. wie eine für Android und eine für PC oder so ähnlich.

Wie Sie sagten, wenn Sie gute Gewohnheiten lernen möchten, würde ich mich für Mikes Ansatz entscheiden. Es ist sehr sinnvoll und der Ansatz, den ich in meinen Two-Man-Indie-Projekten verwende.

Schaum
quelle
1

Alles, was Sie brauchen, um zurück zu gehen und weiter zu arbeiten, sollte verzweigbar sein (aber noch nicht unbedingt verzweigt ...).

Der Grund dafür ist einfach. Sie müssen in der Lage sein, eine feste Version dieses Codes und keinen anderen Code auszugeben. Zu diesem Zeitpunkt müssen Sie also an einem Zweig arbeiten.

VCS sind anders. Einige - wie git - lassen sich sehr einfach zu einem späteren Zeitpunkt von einem Commit trennen, andere - wie CVS - sind für die spätere Arbeit sehr umständlich.

Vielleicht möchten Sie eine Frage zum Stackoverflow öffnen und sich fragen, wie Sie am besten mit dem von Ihnen gewählten Versionskontrollsystem arbeiten können? Wenn Sie noch nicht wirklich mit viel Geschichte angefangen haben , möchten Sie vielleicht eine Frage zu Ihrer Arbeitsweise öffnen und eine Empfehlung für das beste Versionskontrollsystem für Sie einholen?

Thorbjørn Ravn Andersen
quelle