Przyszło mi do głowy, że podczas gdy, na przykład, silnik gry, pracuje jednocześnie przez wiele osób, jak można uniknąć nadpisywania?
Powiedzmy, że programista nad którym pracuje, Audio.cpp
a programista nad drugim również Audio.cpp
, w jaki sposób jest to ogólnie zarządzane w dużych zespołach w celu zwalczania nadpisywania? (Innymi słowy, aby zatrzymać programistę dwa przed otwarciem pliku, dopóki programista jeden nie zakończy pracy)
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
źródło
źródło
Odpowiedzi:
Większość zespołów tworzących oprogramowanie (nie tylko podczas tworzenia gier) rozwiązuje ten problem za pomocą oprogramowania do kontroli wersji . Przykładami są
Wszystkie te narzędzia mają pewne różnice, ale podstawowy przepływ pracy jest zwykle taki: Istnieje jedno centralne repozytorium dla projektu z pełną bazą kodu. Gdy programista chce dołączyć do projektu, wykonuje „kasę”. Oprogramowanie do kontroli wersji kopiuje bazę kodów na komputer lokalny. Oprogramowanie zapamiętuje bieżącą wersję („wersję”) bazy kodu. Gdy programista dokonał zmian i chce je umieścić w głównym repozytorium, wykonuje „zatwierdzenie”. Ich zmiany są przesyłane do centralnego repozytorium i tworzony jest nowy numer wersji.
Gdy inny programista chce teraz zatwierdzić swoje zmiany, ale wersja, którą raz wypisali, nie jest już najnowsza, system kontroli wersji im na to nie pozwala. Deweloper musi najpierw „wyciągnąć” poprawki, które wydarzyły się w międzyczasie. To aktualizuje ich lokalną kopię do najnowszej wersji w centralnym repozytorium. Kiedy występują konflikty (w przejściowych wersjach wprowadzono zmiany do pliku, który również zmienili), oprogramowanie może poprosić ich o rozwiązanie konfliktu poprzez ręczną edycję konfliktowych plików („scalanie”), na wypadek, gdyby nie udało się tego automatycznie zrobić. Po wykonaniu tej czynności mogą zatwierdzić zmiany jako nową wersję.
źródło
Programiści nie używają tego samego pliku.
Każdy programista ma własną wersję pliku i do zarządzania swoją pracą korzysta ze specjalnego rodzaju oprogramowania. Jeśli obaj dokonają w nim zmian, ten, który próbuje zastąpić zmiany dokonane przez innego programistę, napotka konflikt, który należy rozwiązać, w przeciwnym razie oprogramowanie, o którym mówiłem, zaczyna narzekać. Innymi słowy, programista, który powoduje konflikt, musi połączyć swoją pracę z pracą innego programisty i dopiero wtedy plik można „zapisać”.
To proste wyjaśnienie części niezbyt prostej koncepcji kontroli wersji .
źródło
Oprócz kwestii poruszonych w innych odpowiedziach dotyczących kontroli wersji i rozwiązywania konfliktów przy scalaniu, istnieją co najmniej dwa inne sposoby, w których członkowie zespołu mogą uniknąć wzajemnego nadpisywania swojej pracy:
Niektóre systemy kontroli wersji (np. SVN) umożliwiają blokowanie plików. Oznacza to, że jeden członek zespołu może przejąć wyłączną własność pliku przez pewien czas, uniemożliwiając innym członkom zespołu dokonywanie sprzecznych edycji (lub, w rzeczywistości, jakichkolwiek zmian), dopóki plik nie zostanie odblokowany.
Jest to jednak powszechnie stosowane rzadko, ponieważ może powodować szereg problemów. Może zmniejszyć produktywność (ograniczając, kto może pracować na plikach w danym momencie) i może powodować problemy, jeśli ktoś zapomni odblokować plik. Ponadto, przynajmniej w przypadku SVN (nie jestem pewien co do innych VCS), zablokowanie pliku nie zapobiega wprowadzeniu zmian w kopii roboczej przez kogoś innego, tylko zapobiega ich zatwierdzeniu - może to prowadzić do zmarnowanego wysiłku, jeśli programista modyfikuje plik tylko w celu wykrycia, że nie może zatwierdzić swoich zmian, ponieważ jest on zablokowany.
Zespoły mogą próbować przypisywać zadania programistom w taki sposób, aby nie mieli więcej niż jednej osoby pracującej nad danym plikiem w danym momencie. Na przykład, programiści mogą być odpowiedzialni za określoną część projektu (np. Renderowanie 3D, sieć, audio itp.) - jeśli podstawa kodu jest dobrze zmodularyzowana, to programista przypisany do kodu sieci nie powinien dotykać plików radzenie sobie z dźwiękiem.
Oczywiście zawsze zachodzi pewne nakładanie się, którym należy zarządzać w inny sposób.
źródło