Контроль версій з розробкою гри - Коли я повинен гілкувати?


26

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

Коли я повільно відкриваю особливості та переваги використання управління версіями, я застряг навколо ідеї розгалуження. Коли я повинен це зробити?

Чи повинен бути кожен раз, коли я йду і розробляю нову особливість, або лише раз у раз, коли досягаю певної віхи?

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

Коли я читав книгу « Кодування ігор, завершена Майком МакШаффрі (це, до речі, чудова книга)», я зовсім загубився, коли автор рекомендував зберігати три гілки, щось уздовж:

  • Головна : Основна галузь розвитку, де регулярно вносяться зміни.
  • Золото : Золота гілка, де зберігається останній рубіж.
  • Дослідження : відділення для тестування матеріалів, які можуть погано вплинути на головну гілку (зміни важливих компонентів ігрового двигуна тощо).

Це так має бути? Як це насправді працює у світі розвитку ігор з великими командами розробників?

В основному: Коли в розробці гри зазвичай розгалужується (і зливається)?

Відповіді:


32

Розгалуження мало залежить від підтримки VCS для функції (тобто: чи робить це VCS легким чи складним).

Але як мінімум, ви хочете відділення для кожного незалежно підтримуваного випуску вашого проекту. Тобто, якщо у вас є "Гра 2" та "Гра 2 + розширення", які є окремими продуктами, побудованими з тієї ж кодової бази, і які вам потрібно мати можливість виправити і виправити оновлення, то ви хочете мати кожне з цих існують у власному відділенні основної кодової бази, так що виправлення до основної кодової бази можуть бути об'єднані у кожен із цих продуктів незалежно. (Зазвичай ці гілки створюються після випуску кожного продукту або, можливо, за кілька днів / тижнів до цього, якщо в кодовій базі є люди, які працюють над речами, які ви не бажаєте виходити з початкового випуску)

Під час роботи з VCS, який робить гілки складними або болючими (SourceSafe, svn тощо), ви, ймовірно, будете найщасливішим, підтримуючи гілку "випуску" кожного випущеного продукту і роблячи свою основну розробку в "стовбурі", об'єднання змін від "trunk" до гілок "release", якщо і коли потрібно випустити виправлення для цих випусків.

Якщо, з іншого боку, ви працюєте з однією з новіших систем VCS, які побудовані навколо розгалуження та злиття (git, Bazaar, Mercurial тощо), то, ймовірно, ви будете найщасливішими, роблячи свою розробку за короткий час -живі гілки "функції". Наприклад, якщо ви працюєте над AI pathfinding, ви можете зробити гілку "pathfinding" і реалізувати код там. Закінчивши, ви з’єднуєте цю гілку назад у свій основний стовбур розвитку та (необов'язково) видаляєте гілку, в якій працювали. Перевага такого підходу полягає в тому, що він дозволяє одночасно працювати над кількома завданнями, замість того, щоб виконувати одну завдання перед початком наступного.

У моєму поточному домашньому проекті (за допомогою git) у мене зараз є п'ять різних галузей функцій, які працюють над різними різними функціями. Два з них - це альтернативні підходи робити те саме (для профілювання), два - експериментальні ідеї механіки ігор, а один - великий рефактор моїх AI-систем, і насправді розбивається таким чином, що код не складе правильно зараз. Але це зроблено у своїй галузі функцій для довідки та резервного копіювання, і її розбиття не заважає мені працювати над іншими функціями; Ці інші гілки функцій (і головний магістраль розробки) як і раніше збираються та запускаються правильно.

З мого досвіду розробки професійних ігор для великих команд, ми все ще в основному дотримуємося старих (і комерційно підтримуваних) систем управління версіями. Перфорсе, мабуть, найчастіше використовується, за ним слідує Subversion. Скрізь, де я працював, у нас була гілка «магістраль», а потім окрема гілка «випуску» для кожного результату (важливий етап / демонстрація / реліз / тощо). Інколи хтось зробить особисту гілку за якісь величезні зміни, які вони вносять або тестують, але це вкрай рідко, і зазвичай це стосується таких речей, як "перетворення гри для запуску з цією різною бібліотекою фізики", яка насправді може не перейти до випущений продукт.


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

8

Вже відмінна відповідь вище, але одне, що слід зазначити, це коли ви хочете відгалужуватись і коли потрібно тегувати.

Більшість vcs дозволить вам тегувати (іноді вони називають це маркування). Ви повинні застосовувати тег кожного разу, коли ви робите основну збірку (або для відтворення, або для бета-тесту, або для функції, що входить). Якщо ви використовуєте якусь безперервну інтеграцію (і вам слід), то система CI повинна мітити успішні збірки. Зазвичай будь-коли, коли ви робите щось, до чого ви хочете повернутися (або створити гілку, або перевірити, як ви щось зробили в цій версії), зробіть тег / ярлик Зазвичай вони дешеві і прості в додаванні.

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

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


+1 для обговорення тегів (про які я хотів поговорити, але не знав, як згадати, не ставши ще більш словним, ніж я вже був). Хороші моменти щодо перевірки в компільованих (або оброблених іншим способом) файлах на VCS, я також працював у багатьох місцях, які допустили цю помилку, і це завжди призводить до болю в душі.
Тревор Пауелл

1

Мені сподобалась ця книга, і я рекомендую її усім, хто має відповідні інтереси. Для проектів одного чоловіка Інді немає жодної реальної необхідності розгалужуватися, якщо вам не потрібно або не потрібно створювати окремі версії; наприклад, для Android та одного для ПК, або щось подібне.

Як ви сказали, якщо ви хочете отримати хороші звички, я б пішов з підходом Майка. Це має багато сенсу та його підхід, який я використовую у своїх двох проектах з Інді.


1

Все, що вам потрібно, щоб мати змогу повернутися назад та зробити більше роботи над цим, має бути розгалуженим (але не обов’язково розгалуженим ... все ж).

Причина цього проста. Вам потрібно мати можливість випустити фіксовану версію цього коду, а не будь-який інший код, тому в цей час вам потрібно працювати над гілкою.

ДКС різні. Одні - як git - дуже легко відключитися від будь-якого комітету в будь-який пізній час, інші - як CVS - дуже громіздко працювати з пізніше.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.