La ramificación depende un poco del soporte de VCS para la función (es decir, si el VCS lo hace fácil o difícil).
Pero, como mínimo, desea una rama para cada versión de su proyecto con soporte independiente. Es decir, si tiene "Juego 2" y "Juego 2 + Expansión", que son productos independientes creados a partir de la misma base de código, y que necesita para poder parchear y emitir actualizaciones, entonces desea tener cada uno de estos existen en su propia rama fuera de la base de código principal, de modo que las correcciones a la base de código central se pueden combinar en cada uno de estos productos de forma independiente. (Por lo general, estas ramas se crean cuando se lanza cada producto, o tal vez unos días / semanas antes, si tiene personas trabajando en cosas en la base de código que no desea publicar con la versión inicial)
Cuando trabaje con un VCS que hace que el uso de ramas sea difícil o doloroso (SourceSafe, svn, etc.), entonces probablemente será más feliz manteniendo una rama de "lanzamiento" para cada producto lanzado y haciendo su desarrollo principal en "tronco", fusionar los cambios de "troncal" en las ramas de "lanzamiento" si y cuando necesita lanzar revisiones para esos lanzamientos.
Si, por otro lado, está trabajando con uno de los sistemas VCS más nuevos que se basan en la ramificación y la fusión (git, Bazaar, Mercurial, etc.), entonces probablemente será más feliz haciendo su desarrollo en muy poco tiempo -vivo "característica" ramas. Por ejemplo, si está trabajando en la búsqueda de rutas de AI, puede hacer una rama de "búsqueda de rutas" e implementar el código allí. Cuando termine, vuelva a fusionar esa rama en su tronco principal de desarrollo y (opcionalmente) elimine la rama en la que estaba trabajando. El beneficio de este enfoque es que le permite trabajar en múltiples tareas simultáneamente, en lugar de tener que completar una. tarea antes de comenzar con la siguiente.
En mi proyecto de inicio actual (usando git), tengo cinco ramas de características diferentes activas en este momento, trabajando en varias características diferentes. Dos de ellos son enfoques alternativos para hacer lo mismo (para perfilar), dos son ideas mecánicas de juegos experimentales, y uno es un gran refactorizador de mis sistemas de IA, y en realidad está roto de tal manera que el código no se compila correctamente ahora. Pero está comprometido en su rama de características para referencia y respaldo, y estar roto no me impide trabajar en las otras características; Esas otras ramas de características (y el tronco principal de desarrollo también) aún se compilan y se ejecutan correctamente.
En mi experiencia en el desarrollo de juegos profesionales de grandes equipos, todavía estamos atrapados en su mayoría con sistemas de control de versiones más antiguos (y con soporte comercial). Perforce es probablemente el más utilizado, seguido de Subversion. En todas partes donde he trabajado, hemos tenido una rama 'troncal', y luego una rama 'liberación' separada para cada entregable (hito / demo / lanzamiento / etc.). Ocasionalmente, alguien hará una rama personal para un gran cambio que está haciendo o probando, pero esto es extremadamente raro, y generalmente es para cosas como "convertir el juego para que se ejecute con esta biblioteca de física diferente" que en realidad puede no pasar a la producto lanzado.