Контроль версий с разработкой игры - Когда я должен перейти?


26

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

Поскольку я медленно открываю возможности и преимущества использования контроля версий, я застрял вокруг идеи ветвления. Когда я должен это сделать?

Должен ли я каждый раз заниматься разработкой новой функции или только время от времени, когда я достигаю определенного рубежа?

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

Когда я читал книгу Mike McShaffry « Game Coding Complete » (кстати, это отличная книга), я совершенно заблудился, когда автор рекомендовал сохранить три ветви, что-то вроде:

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

Это так и должно быть? Как это действительно работает в мире разработки игр с большими командами разработчиков?

В основном: когда человек обычно разветвляется (и сливается) при разработке игры?

Ответы:


32

Ветвление в некоторой степени зависит от поддержки этой функции VCS (т. Е. Упрощает ли VCS ее или затрудняет).

Но, как минимум, вам нужна ветка для каждого независимо поддерживаемого релиза вашего проекта. То есть, если у вас есть «Игра 2» и «Игра 2 + Расширение», которые являются отдельными продуктами, созданными из одной и той же кодовой базы и к которым нужно иметь возможность устанавливать патчи и выпускать обновления, то вы хотите иметь каждый из этих существуют в своей собственной ветке вне основной кодовой базы, так что исправления базовой кодовой базы могут быть объединены в каждый из этих продуктов независимо. (Как правило, эти ветки создаются, когда выпускается каждый продукт, или, может быть, за несколько дней / недель до этого, если у вас есть люди, работающие над тем в базе кода, которую вы не хотите выпускать с первоначальным выпуском)

При работе с VCS, которая делает использование веток сложным или болезненным (SourceSafe, svn и т. Д.), Вы, вероятно, будете счастливы, поддерживая ветку «release» для каждого выпущенного продукта и занимаясь основной разработкой в ​​«trunk», объединение изменений из "trunk" в ветки "release", если и когда вам нужно выпустить исправления для этих выпусков.

Если, с другой стороны, вы работаете с одной из более новых систем VCS, которые построены на ветвлении и слиянии (git, Bazaar, Mercurial и т. Д.), То вы, вероятно, будете счастливы, выполняя разработку в короткие сроки. "особенные" ветки. Например, если вы работаете над AI pathfinding, вы можете создать ветку «pathfinding» и реализовать там код. Когда вы закончите, вы сливаете эту ветку обратно в основной ствол разработки и (необязательно) удаляете ветку, в которой работали. Преимущество этого подхода заключается в том, что он позволяет вам работать над несколькими задачами одновременно, вместо того, чтобы выполнять одну из них. задание, прежде чем приступить к следующему.

В моем текущем домашнем проекте (с использованием git) у меня сейчас пять активных веток функций, работающих над различными функциями. Два из них - альтернативные подходы к выполнению одного и того же (для профилирования), два - экспериментальные идеи игровой механики, и один - большой рефакторинг моих систем ИИ, и на самом деле он сломан таким образом, что код не будет компилироваться в настоящее время. Но он передается в своей ветке функций для справки и для резервного копирования, и его поломка не мешает мне работать над другими функциями; Эти другие ветви функций (и основная ветка разработки) по-прежнему компилируются и работают правильно.

По моему опыту разработки профессиональных игр для большой команды, мы все еще в основном придерживаемся старых (и поддерживаемых в коммерческих целях) систем контроля версий. Perforce, вероятно, наиболее часто используемый, сопровождаемый Subversion. Везде, где я работал, у нас была ветка 'trunk', а затем отдельная ветка 'release' для каждого результата (milestone / demo / release / etc). Иногда кто-то делает персональную ветвь для каких-то огромных изменений, которые он делает или тестирует, но это крайне редко, и обычно для таких вещей, как «преобразование игры для запуска с этой другой библиотекой физики», которая на самом деле может и не пройти к выпущенный продукт.


1
Потрясающий ответ. Я подожду немного, прежде чем пометить его как принятый ответ, чтобы посмотреть, принесут ли другие зерно соли на основе своего опыта.
Джесси Эмонд

8

Уже отличный ответ выше, но стоит отметить, когда вы хотите разветвиться и когда вы хотите пометить.

Большинство vcs позволяют вам помечать теги (иногда они называют это маркировкой). Вы должны применять тег каждый раз, когда вы делаете основную сборку (либо для игрового теста, либо для бета-тестирования, либо для входящей функции). Если вы используете какую-то непрерывную интеграцию (и вам следует), система CI должна помечать успешные сборки. По сути, каждый раз, когда вы делаете что-то, к чему вы, возможно, захотите вернуться (создать ветку или проверить, как вы что-то сделали в этой версии), создайте тег / метку. Они обычно дешевы и просты в добавлении.

Еще одна вещь, которую я бы настоятельно советовал - хранить ваши ресурсы и код в одной и той же системе управления версиями. Наличие ветви (или тега) кода совершенно бесполезно, если вы не можете сопоставить (а затем и разветвить) активы. Это одна из главных причин, по которой игровые компании любят Perforce - они одинаково счастливы хранить бинарные художественные файлы, так как они хранят код, и (в отличие от git) это понятно нетехническим типам!

Да, и каждый раз, когда вы чувствуете, что хотите проверить скомпилированные файлы в вашей остановке VCS и подумать о том, как этого избежать. По моему опыту, это почти всегда приводит к несоответствию данных, отсутствию источника (где, например, проверяется сжатая текстура DDS, но не к исходному png), и хаосу вниз по линии. Если у вас есть конвейер ресурсов, который лучше обслуживается экспортируемыми файлами, кэшируемыми где-то (так что все не воссоздают один и тот же набор файлов), во что бы то ни стало, есть процесс, собирающий исходные ресурсы в вашей VCS и помещающий экспортированные файлы в кеш (или общий диск, или даже отдельный VCS). Но не проверяйте эти экспортированные файлы вручную - это вас укусит (особенно, если вы работаете в команде).


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

1

Мне понравилась эта книга, и я рекомендую ее всем, кто имеет к этому отношение. Для проектов, состоящих из одного человека, нет никакой необходимости в ветвлении вообще, если вам не нужно или вы не хотите создавать отдельные версии; как один для Android и один для ПК, или что-то в этом роде.

Как вы сказали, если вы хотите приобрести хорошие привычки, я бы пошел с подходом Майка. Это имеет большой смысл, и этот подход я использую в своих двух независимых проектах.


1

Все, что вам нужно, чтобы иметь возможность вернуться и выполнить больше работы, должно быть разветвленным (но не обязательно разветвленным ... пока).

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

VCS'ы разные. Некоторые из них - например, git - очень легко переходить из любого коммита в любое более позднее время, другие - например, CVS - работать с ними позже очень сложно.

Возможно, вы хотите задать вопрос по stackoverflow, спрашивая, как лучше всего работать с выбранной вами системой контроля версий? Если вы еще не на самом деле не начали с большой историей, вы можете открыть вопрос , описывающий способ работы и просить рекомендации лучшей системы контроля версий для вас?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.