Mir ist der Gedanke gekommen, dass, während zum Beispiel die Game-Engine von mehreren Personen gleichzeitig bearbeitet wird, wie das Überschreiben verhindert wird?
Lassen Sie uns sagen Entwickler ein arbeitet an Audio.cpp
und Entwickler zwei arbeitet auch an Audio.cpp
, wie sich dies in der Regel in großen Teams zu bekämpfen Überschreibungs verwaltet? (Mit anderen Worten, um Entwickler 2 daran zu hindern , die Datei zu öffnen, bis Entwickler 1 fertig ist.)
project-management
version-control
teamwork
java
2d
collision-detection
vector
collision-resolution
unity
directx
directx11
directx10
xna
ios
monogame
windows-phone-8
xamarin
design-patterns
oop
xna
collision-detection
collision-resolution
bounding-boxes
rotation
collision-detection
mathematics
javascript
algorithm
separating-axis-theorem
xna
2d
monogame
image
xna
directx
graphics
performance
opengl
2d
3d
c++
directx11
unity
c#
scale
c#
xna
collision-detection
collision-resolution
leaderboards
scoring
glsl
srgb
tilemap
three.js
tiled
unity
physics
xml
dialog-tree
xna
c#
.net
opengl
lwjgl
vbo
physics
graphics
procedural-generation
simulations
water
opengl
java
textures
lwjgl
frame-buffer
unity
unity
2d
collision-detection
collision-resolution
trigonometry
java
android
libgdx
xna
c#
frame-rate
c++
unreal-4
procedural-generation
java
graphics
lwjgl
slick
c++
software-engineering
Ethan Webster
quelle
quelle
Antworten:
Die meisten Softwareentwicklungsteams (nicht nur in der Spieleentwicklung) lösen dieses Problem mit Versionskontrollsoftware . Beispiele sind
Alle diese Tools haben einige Unterschiede, aber der grundlegende Workflow sieht normalerweise so aus: Es gibt ein zentrales Repository für das Projekt mit der vollständigen Codebasis. Wenn ein Entwickler dem Projekt beitreten möchte, führt er einen "Checkout" durch. Die Versionskontrollsoftware kopiert die Codebasis auf ihren lokalen Computer. Die Software merkt sich die aktuelle Version ("Revision") der Codebasis. Wenn ein Entwickler Änderungen vorgenommen hat und diese in das Haupt-Repository übernehmen möchte, führt er ein "Commit" durch. Ihre Änderungen werden in das zentrale Repository hochgeladen und eine neue Revisionsnummer wird erstellt.
Wenn ein anderer Entwickler nun seine Änderungen festschreiben möchte, die einmal ausgecheckte Revision jedoch nicht mehr die neueste ist, werden sie vom Versionskontrollsystem nicht zugelassen. Der Entwickler muss zunächst die in der Zwischenzeit aufgetretenen Revisionen "ziehen". Dadurch wird die lokale Kopie auf die neueste Version im zentralen Repository aktualisiert. Bei Konflikten (Änderungen, die zwischenzeitlich an einer Datei vorgenommen wurden) werden Sie möglicherweise von der Software aufgefordert, den Konflikt zu lösen, indem Sie die in Konflikt stehenden Dateien manuell bearbeiten ("Zusammenführen"), falls dies nicht automatisch möglich ist. Danach können sie ihre Änderungen als neue Revision übernehmen.
quelle
Entwickler verwenden nicht dieselbe Datei.
Jeder Entwickler hat seine eigene Version der Datei und verwendet eine spezielle Software, um seine Arbeit zu verwalten. Wenn beide Änderungen daran vornehmen, stößt derjenige, der versucht, die vom anderen Entwickler vorgenommenen Änderungen zu überschreiben, auf einen Konflikt, der gelöst werden muss. Andernfalls beschwert sich die Software, über die ich gesprochen habe. Mit anderen Worten, der Entwickler, der den Konflikt verursacht, muss seine Arbeit mit der Arbeit des anderen Entwicklers kombinieren, und erst dann kann die Datei "gespeichert" werden.
Dies ist eine einfache Erklärung für einen Teil des ansonsten nicht so einfachen Konzepts der Versionskontrolle .
quelle
Zusätzlich zu den Punkten, die in den anderen Antworten zur Versionskontrolle und zur Behandlung von Konflikten mit Zusammenführungen angesprochen wurden, gibt es mindestens zwei weitere Möglichkeiten, mit denen Teammitglieder vermeiden können, dass die Arbeit des anderen überschrieben wird:
Einige Versionskontrollsysteme (zB SVN) erlauben das Sperren von Dateien. Dies bedeutet, dass ein Teammitglied für einige Zeit das ausschließliche Eigentum an einer Datei übernehmen kann, wodurch andere Teammitglieder daran gehindert werden, widersprüchliche Änderungen (oder überhaupt Änderungen) vorzunehmen, bis die Datei anschließend entsperrt wird.
Dies wird jedoch im Allgemeinen selten verwendet, da es eine Reihe von Problemen verursachen kann. Dies kann die Produktivität verringern (indem eingeschränkt wird, wer zu einem bestimmten Zeitpunkt an Dateien arbeiten kann) und Probleme verursachen, wenn jemand vergisst, eine Datei zu entsperren. Zumindest für SVN (bei anderen VCSs bin ich mir nicht sicher) verhindert das Sperren einer Datei nicht, dass andere Personen Änderungen an ihrer Arbeitskopie vornehmen, sondern dass sie ihre Änderungen übernehmen. Dies kann für Entwickler zu unnötiger Anstrengung führen Ändert die Datei nur, um festzustellen, dass sie ihre Änderungen nicht übernehmen können, da sie gesperrt sind.
Teams können versuchen, den Entwicklern Aufgaben so zuzuweisen, dass zu einem bestimmten Zeitpunkt nicht mehr als eine Person an einer bestimmten Datei arbeitet. Beispielsweise können Entwickler jeweils für einen bestimmten Teil des Projekts verantwortlich sein (z. B. 3D-Rendering, Netzwerk, Audio usw.). Wenn die Codebasis gut modularisiert ist, muss der dem Netzwerkcode zugewiesene Entwickler die Dateien kaum berühren Umgang mit Audio.
Natürlich wird es immer einige Überlappungen geben, die auf andere Weise verwaltet werden müssen.
quelle