Terlintas dalam benak saya kemungkinan bahwa sementara, misalnya mesin gim, sedang dikerjakan secara simultan oleh banyak orang bagaimana mencegah penulisan ulang?
Katakanlah pengembang satu sedang bekerja Audio.cpp
dan pengembang dua juga bekerja Audio.cpp
, bagaimana ini umumnya dikelola dalam tim besar untuk memerangi penimpaan? (Dengan kata lain untuk menghentikan pengembang dua dari membuka file sampai pengembang satu selesai)
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
sumber
sumber
Jawaban:
Sebagian besar tim pengembangan perangkat lunak (tidak hanya dalam pengembangan game) menyelesaikan masalah ini menggunakan perangkat lunak kontrol versi . Contohnya adalah
Semua alat ini memiliki beberapa perbedaan, tetapi alur kerja dasarnya biasanya seperti ini: Ada satu repositori pusat untuk proyek dengan basis kode lengkap. Ketika seorang pengembang ingin bergabung dengan proyek, mereka melakukan "checkout". Perangkat lunak kontrol versi menyalin basis kode ke mesin lokal mereka. Perangkat lunak mengingat versi saat ini ("revisi") dari basis kode. Ketika seorang pengembang membuat perubahan dan ingin menempatkannya di repositori utama, mereka melakukan "komit". Perubahannya diunggah ke repositori pusat, dan nomor revisi baru dibuat.
Ketika pengembang lain sekarang ingin melakukan perubahan mereka tetapi revisi yang pernah mereka periksa tidak lagi yang terbaru, sistem kontrol versi tidak akan membiarkannya. Pengembang pertama-tama perlu "menarik" revisi yang terjadi sementara itu. Ini memperbarui salinan lokal mereka ke versi terbaru di repositori pusat. Ketika ada konflik (revisi menengah membuat perubahan pada file yang juga mereka ubah), perangkat lunak mungkin meminta mereka untuk menyelesaikan konflik dengan mengedit file yang bertentangan secara manual ("gabungan") jika tidak berhasil melakukannya secara otomatis. Setelah mereka melakukan itu, mereka dapat melakukan perubahan sebagai revisi baru.
sumber
Pengembang tidak menggunakan file yang sama .
Setiap pengembang memiliki versi file sendiri, dan mereka menggunakan jenis perangkat lunak khusus untuk mengelola pekerjaan mereka. Jika mereka berdua melakukan perubahan, yang mencoba menimpa perubahan yang dilakukan oleh pengembang lain akan menemui konflik yang harus diselesaikan, jika tidak, perangkat lunak yang saya bicarakan mulai mengeluh. Dengan kata lain, pengembang yang menyebabkan konflik, perlu menggabungkan pekerjaan mereka dengan pekerjaan pengembang lain, dan hanya dengan demikian file tersebut dapat "disimpan".
Ini adalah penjelasan sederhana untuk bagian dari konsep kontrol versi yang tidak terlalu sederhana .
sumber
Selain poin yang diajukan dalam jawaban lain tentang kontrol versi dan penanganan konflik dengan penggabungan, ada setidaknya dua cara lain yang anggota tim dapat hindari menimpa pekerjaan masing-masing:
Beberapa sistem kontrol versi (misalnya SVN) memungkinkan penguncian file. Ini berarti bahwa satu anggota tim dapat mengambil kepemilikan eksklusif atas suatu file untuk jangka waktu yang lama, mencegah anggota tim lainnya dari melakukan pengeditan yang bertentangan (atau, benar-benar, setiap pengeditan) sampai file tersebut kemudian dibuka.
Namun, ini umumnya jarang digunakan, karena dapat menyebabkan sejumlah masalah. Ini dapat mengurangi produktivitas (dengan membatasi siapa yang dapat mengerjakan file pada waktu tertentu), dan dapat menyebabkan masalah jika seseorang lupa membuka kunci file. Juga, setidaknya untuk SVN (saya tidak yakin tentang VCS lainnya), mengunci file tidak mencegah orang lain membuat perubahan pada copy pekerjaan mereka, itu hanya mencegah mereka melakukan perubahan - ini dapat mengakibatkan usaha yang sia-sia jika pengembang memodifikasi file hanya untuk menemukan mereka tidak dapat melakukan perubahan karena terkunci.
Tim dapat mencoba untuk menetapkan tugas kepada pengembang sedemikian rupa sehingga mereka tidak memiliki lebih dari satu orang yang mengerjakan file tertentu pada waktu tertentu. Misalnya, masing-masing pengembang dapat bertanggung jawab atas bagian tertentu dari proyek (misalnya rendering 3D, jaringan, audio, dll) - jika basis kode dimodulasi dengan baik, maka pengembang yang ditugaskan ke kode jaringan harus memiliki sedikit kebutuhan untuk menyentuh file. berurusan dengan audio.
Tentu saja, akan selalu ada beberapa tumpang tindih yang harus dikelola dengan cara lain.
sumber