Як команди запобігають перезапису роботи у вихідних файлах? [зачинено]


26

Мені спало на думку можливість запобігання перезапису, хоча, наприклад, над ігровим двигуном одночасно працюють декілька людей?

Скажімо, розробник працює над іншим , Audio.cppа також розробник два працює над тим Audio.cpp, як це, як правило, у великих командах для боротьби з перезаписом? (Іншими словами, зупинити розробника два від відкриття файлу до тих пір, поки не буде завершено розробник )


84
Один із вибраних вами тегів - це вже відповідь.
Філіп

18
Насправді, 3 з 4 -х тегів відповідь, але один відповідь.
MSalters

1

Відповіді:


69

Більшість команд з розробки програмного забезпечення (не тільки в розробці ігор) вирішують цю проблему за допомогою програмного забезпечення для управління версіями . Приклади є

Всі ці інструменти мають деякі відмінності, але основний робочий процес зазвичай такий: Є одне центральне сховище для проекту з повною базою кодів. Коли розробник хоче приєднатися до проекту, він виконує "замовлення". Програмне забезпечення управління версіями копіює базу коду на свій локальний апарат. Програмне забезпечення запам'ятовує поточну версію ("редакцію") бази даних коду. Коли розробник вніс свої зміни і хоче розмістити їх у головному сховищі, він виконує "фіксацію". Їх зміни завантажуються в центральний сховище, і створюється новий номер редакції.

Коли інший розробник зараз хоче внести свої зміни, але переглянута ними редакція вже не є останньою, система контролю версій не дозволить їм. Розробнику спочатку потрібно "витягнути" зміни, які відбулися тим часом. Це поновлює їх локальну копію до останньої версії в центральному сховищі. Якщо виникають конфлікти (проміжна редакція внесла зміни до файлу, який вони також змінили), програмне забезпечення може попросити їх вирішити конфлікт, відредагувавши конфліктуючі файли вручну ("злиття"), якщо це не вдається автоматично зробити це. Після цього вони можуть внести свої зміни як нову редакцію.


18
Зверніть увагу , що Git і Mercurial будуть розподілені системи управління версіями, які працюють трохи по- іншому: вони не вимагають єдиного центрального сховища, але теоретично дозволяє будь-якому розробнику на поновлення тягнути безпосередньо від кого - небудь ще. Звичайно, на практиці все ще прийнято, щоб одне сховище (часто розташоване на публічному хості, як-от GitHub) було оголошено "офіційним", і використовувалося більш-менш як центральне сховище в нерозподіленій системі управління версіями.
Ільмарі Каронен

18
Ця відповідь також означає, що злиття завжди робиться вручну. Однак більшість часу програмне забезпечення для управління версіями може об'єднувати відмінності автоматично, і вимагає лише ручної роботи для дійсно тернистих змін.
поштовх

Будь ласка, уникайте розширених дискусій у коментарях, людей. Це не дискусійний форум. Використовуйте Чат розвитку ігор, якщо ви хочете це зробити. Я очистив кілька дотичних ниток коментарів.
Джош

Крім того, в ідеалі кожен член команди буде відповідати за конкретні модулі майже виключно, і лише в рідкісних випадках більше однієї особи змінює один і той же вихідний файл за короткий проміжок часу, оскільки цей робочий процес мінімізує необхідність об'єднання суперечливих змін. Але це не завжди так.
Nicolas Miari

13

Розробники не використовують один і той же файл.

У кожного розробника є своя версія файлу, і вони використовують спеціальний вид програмного забезпечення для управління своєю роботою. Якщо вони обидва внесуть в нього зміни, той, хто намагається замінити зміни, зроблені іншим розробником, зіткнеться з конфліктом, який необхідно вирішити, інакше програмне забезпечення, про яке я говорив, починає скаржитися. Іншими словами, розробнику, який викликає конфлікт, потрібно поєднувати свою роботу з роботою іншого розробника, і лише тоді файл можна "зберегти".

Це просте пояснення частини інакше не настільки простої концепції управління версіями .


6
Крім того, вони роблять цю новинку, яку називають спілкуванням, а програмне забезпечення не пишеться у вакуумі. Тож якщо вони не розуміють конфлікт, вони заздалегідь поговорять з іншою людиною або погоджуються.
Брайан

9

Окрім пунктів, що виникають в інших відповідях щодо контролю версій та керування конфліктами зі злиттями, є щонайменше два інші способи, завдяки яким члени команди можуть уникнути перезапису роботи один одного:

  • Деякі системи управління версіями (наприклад, SVN) дозволяють блокувати файли. Це означає, що один член команди може протягом певного часу брати ексклюзивне право власності на файл, не дозволяючи іншим членам команди вносити суперечливі зміни (або, справді, будь-які зміни), поки файл згодом не розблокується.

    Однак зазвичай це використовується нечасто, оскільки це може спричинити ряд проблем. Це може знизити продуктивність (обмеживши, хто може працювати над файлами в будь-який конкретний час), а також може спричинити проблеми, якщо хтось забуде розблокувати файл. Крім того, щонайменше для SVN (я не впевнений у інших VCS), блокування файлу не заважає іншим вносити зміни до їх робочої копії, це лише заважає вносити зміни - це може призвести до марних зусиль, якщо розробник модифікує файл лише для того, щоб виявити, що вони не можуть здійснити свої зміни, оскільки він заблокований.

  • Команди можуть спробувати призначити завдання розробникам таким чином, щоб у них не було більше однієї людини, яка працює в будь-якому конкретному файлі в даний момент часу. Наприклад, розробники можуть нести відповідальність за певну частину проекту (наприклад, 3D-рендерінг, мережу, аудіо тощо) - якщо база коду добре модулюється, то розробник, призначений мережевому коду, повинен мало потребувати дотику до файлів має справу зі звуком.

    Звичайно, завжди буде якесь перекриття, яким треба керувати іншим чином.


2
З іншого боку, блокування - це єдиний спосіб редагування .JPEG або іншого непростого тексту. Це не теоретичне обмеження, це просто те, що інструменти злиття зазвичай смокчуть.
MSalters

2
@MSalters Це не те, що інструменти смоктають, це просто те, що більшість інструментів злиття створені для тексту, а не для двійкових даних. І як би ви вирішили конфлікт, якщо дві зміни змінили один і той же піксель у файлі? Або ще гірше, як би ви вплинули на зміни, спричинені стисненням JPEG? Це дуже складна проблема, яка може навіть не мати єдиного хорошого рішення, тому причина більшості інструментів для злиття не підтримує, тому що необхідність у цьому дуже рідкісна, а функціонал важко реалізувати.
Маурісі

3
@MaurycyZarzycki: Зміна однієї літери схожа на зміну того ж пікселя: для вирішення потрібне вручну. .JPEG, мабуть, був поганим прикладом, я зараз усвідомлюю, тому що художники не працюють на втрачених форматах. Але проблема злиття існує і з .PNG. Як мінімум, ви хотіли б оцінити, якщо інструменти злиття змогли б об'єднати XML, не порушуючи його.
MSalters

@MSalters Звичайно, з цим я можу погодитися набагато більше.
Маурісі

1
@xorsyst: Спробуйте так: перевірте у SVN у двох місцях. Потім заблокуйте файл з місця 1. Місцезнаходження 2 не знатиме, що він заблокований до введення чи оновлення.
Zan Lynx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.