sven erik knop, perforce
TRANSCRIPT
Version Managementfor Game Developers
Sven Erik Knop
Perforce Software
2
What we do
Perforce helps delivery teams build complex products collaboratively, securely and efficiently.
Commonly used for…• Software• Games• Electronics• Animations• Chipsets • Medical Devices• IoT
Global 24x7 Support
3
Why version management?
4
What is Version Management?
src
img
game.cc
game.h
test.cc
knight.psd
armour.png
shield.psd
File @1 @2 @3 @4 @5 @6game.cc #1 #2game.h #1 #2test.cc #1 #2 #3 #4knight.psd #1 #2 #3armour.psd #1 #2 #3shield.psd #1 #2 #3
5
Working with Version Management (1)
#include <game.h>
int main(){
InitialiseGame();PopulateWorld();SetUpOpponents();
StartUpGame();}
6
Working with Version Management (2)
#include <game.h>#include <login.h>
int main(){
LogOnUser();InitialiseGame();PopulateWorld();SetUpOpponents();
StartUpGame();}
7
Working with Version Management (3)
#include <game.h>#include <loot.h>
int main(){
InitialiseGame();PopulateWorld();SeedLoot();SetUpOpponents();
StartUpGame();}
8
Working with Version Management (4)
#include <game.h>#include <login.h>#include <loot.h>
int main(){
LogOnUser();InitialiseGame();PopulateWorld();SeedLoot();SetUpOpponents();
StartUpGame();}
9
Merging ...
#include <game.h>
int main(){
InitialiseGame();PopulateWorld();SetUpOpponents();
StartUpGame();}
#include <game.h>#include <login.h>
int main(){
LogOnUser;InitialiseGame();PopulateWorld();SetUpOpponents();
StartUpGame();}
#include <game.h>#include <loot.h>
int main(){
InitialiseGame();PopulateWorld();SeedLoot();SetUpOpponents();
StartUpGame();}
#include <game.h>#include <login.h>#include <loot.h>
int main(){
LogOnUser();InitialiseGame();PopulateWorld();SeedLoot();SetUpOpponents();
StartUpGame();}
Base
Source
Target
Merged
10
Working together on binary files
Merging for binary files?
Locking!
11
Single of Source of Truth
12
Challenges in Games Development
Why is Games Development so hard?• Besides the obvious I mean …
Average AAA game:• 100 of thousands of files• 1 TB+ source code and assets at HEAD• 50GB + changes a day• 100+ Team size
13
Consequences
Continuous integration• Builds take minutes (incremental) to hours (full)• Smoke tests?• Full tests?
Who broke the build? HEAD is not stable!
14
Coding practices compared
Different ways to organise your sources There is no single best way
• Team size• Target platform: Mobile/Console/PC/4K/…• Rate of change• Iteration frequency
15
Single Code Line
Head
Stable Head still stable?
16
Development branches
Long-lived development branches can cause problems
17
Task/Feature branches
Keeping feature branches short-lived avoids severe merge conflicts
18
3-way merge for binary assets?
Images? 3D models? Sound files?
Locking! Across branches?
19
Component-based
Shared trunk
Separate trunks
20
Trunk-based Development
Trunk
Release
Extended testing for releaseRequires tooling!
Stable
21
Milestone branches
Stabilise in separate branchMerge fixes, ignore hacks
Perforce Helix
23
Flexible Workflow Version control, code reviews, simple file sharing, distributed, Git
Fast and ScalableFrom 10 to 10,000+ users, unlimited files
Every fileEfficiently handles large, often binary, data
All contributorsFamiliar tools, natural workflows
AnywhereSupports geographically distributed teams
Secure Granular permissions, theft risk monitoring
Open and ExtensibleAPIs and integration hooks for customization
Introducing Perforce HelixNext Generation Hybrid Version Management
24
IDEs
Integrated into your workflow
Game Engines
Build/CI
Image and 3D Tools
+ APIs and many other tools
25
Distributed Single Source of Truth
Versioning Service
Proxy
Proxy
Edge Service(humans)D/R
Edge Service(automation)
26
Helix Streams
27
How do I start?
Perforce is free (without restrictions)• For educational purposes• For Open Source projects• For 5 users / 20 workspaces
www.perforce.com
Hosted, for example, by Assembla (www.assembla.com)
Thank YouQuestions?