Why Version Control Is Non-Negotiable
If you're making a game without version control, you're one accidental deletion away from losing everything. Version control provides:
- History: Every change is recorded. Roll back any mistake.
- Collaboration: Multiple people work on the same project without conflicts.
- Branching: Experiment freely — if it breaks, abandon the branch.
- Backup: Your code and assets exist on a remote server, not just your hard drive.
UE5's binary asset format (.uasset, .umap) makes version control more complex than typical software projects. Choosing the right tool matters.
The Contenders
Git + Git LFS
What it is: The world's most popular VCS, extended with Large File Storage for binary assets.
How it works: Git tracks text files (code, configs) natively. Git LFS replaces binary files with pointer files and stores the actual binaries on a separate server.
Cost: Free (self-hosted or GitHub/GitLab free tiers). GitHub LFS storage: $5/month per 50GB data pack.
Perforce Helix Core
What it is: The industry-standard VCS for game studios. Epic uses it for UE5 development.
How it works: Centralized model — files live on the server, you check out files to edit them. Exclusive locks prevent binary merge conflicts.
Cost: Free for up to 5 users and 20 workspaces. Paid plans for larger teams.
Anchorpoint
What it is: A modern GUI tool built on Git, designed specifically for creative teams.
How it works: Git under the hood, but with a visual interface that handles LFS, locking, and large projects transparently.
Cost: Free for up to 3 users, paid plans for teams.
Feature Comparison
| Feature | Git LFS | Perforce | Anchorpoint |
|---|---|---|---|
| Binary file handling | LFS extension | Native | Git LFS (wrapped) |
| File locking | git lfs lock | Exclusive checkout | Visual locking |
| Merge conflicts (binary) | Manual (overwrite) | Prevented by locks | Prevented by locks |
| Branching | Excellent | Streams (complex) | Simplified Git branches |
| Learning curve | Moderate (CLI) | Steep | Low (GUI) |
| Offline work | Full (distributed) | Limited (centralized) | Full (distributed) |
| Max repo size | Depends on LFS host | Virtually unlimited | Depends on Git host |
| IDE integration | VS, Rider, UE5 | VS, Rider, UE5 | Standalone app |
| UE5 integration | Source Control plugin | Source Control plugin | Git-based |
| Cost (5 users) | Free - $25/month | Free | Free - $50/month |
| Cost (20 users) | $100-500/month | $800+/month | $200-400/month |
Git LFS Setup for UE5
Initial Setup
# Initialize Git repo
git init
git lfs install
# Configure LFS tracking for UE5 binary types
git lfs track "*.uasset"
git lfs track "*.umap"
git lfs track "*.uproject"
git lfs track "*.png"
git lfs track "*.jpg"
git lfs track "*.wav"
git lfs track "*.mp3"
git lfs track "*.ogg"
git lfs track "*.fbx"
git lfs track "*.blend"
git lfs track "*.psd"
git lfs track "*.tga"
git lfs track "*.exr"
git lfs track "*.hdr"
git lfs track "*.mp4"
git lfs track "*.bmp"
# Add the .gitattributes
git add .gitattributes
git commit -m "Configure Git LFS tracking for UE5 assets"
Essential .gitignore
# UE5 Generated
Binaries/
Intermediate/
Saved/
DerivedDataCache/
Build/
# IDE
.vs/
.vscode/
.idea/
*.sln
*.suo
# OS
.DS_Store
Thumbs.db
# User-specific
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.opendb
File Locking for Binaries
Enable file locking to prevent conflicts on binary files:
# Lock a file before editing
git lfs lock Content/Maps/MainLevel.umap
# See locked files
git lfs locks
# Unlock when done
git lfs unlock Content/Maps/MainLevel.umap
For teams, configure lockable file patterns:
*.umap lockable
*.uasset lockable
Branch Strategy
For UE5 Git projects:
main ← Stable, always buildable
develop ← Integration branch, daily merges
feature/* ← Individual features
hotfix/* ← Critical fixes for main
release/* ← Release candidates
Important: Never merge branches that modify the same binary file. Use file locking to prevent this.
Perforce Setup for UE5
Server Installation
- Download Helix Core Server from Perforce
- Install and configure the server
- Create a depot for your project
- Set up user accounts
Workspace Configuration
// Perforce workspace (client spec)
Client: username_project
Root: C:\Projects\MyGame
View:
//depot/MyGame/... //username_project/...
Typemap for UE5
Configure Perforce to handle UE5 file types correctly:
TypeMap:
binary+l //depot/....uasset
binary+l //depot/....umap
binary+l //depot/....png
binary+l //depot/....jpg
binary+l //depot/....fbx
text //depot/....cpp
text //depot/....h
text //depot/....ini
text //depot/....cs
text //depot/....json
The +l flag enables exclusive checkout — only one person can edit the file at a time.
UE5 Source Control Integration
- Open UE5 → Edit → Editor Preferences → Source Control
- Set Provider to "Perforce"
- Configure server address, workspace, and credentials
- Content Browser now shows check-out status icons
Stream-Based Workflow
Perforce Streams are the equivalent of Git branches:
//depot/MyGame/main ← Mainline
//depot/MyGame/dev ← Development (child of main)
//depot/MyGame/release ← Release branch (child of main)
Streams handle binary merging better than Git because the server understands the relationship between branches and prevents impossible merges.
Choosing Based on Team Size
Solo Developer
Recommendation: Git + GitHub/GitLab
- Free, simple, familiar
- GitHub/GitLab provide backup and remote access
- Git LFS for binary assets (free tier is usually sufficient)
- No server to maintain
Small Team (2-5)
Recommendation: Git LFS with Anchorpoint, or Perforce free tier
- If everyone's comfortable with CLI: Git LFS + GitHub
- If artists need a simpler interface: Anchorpoint
- If you want bullet-proof binary file handling: Perforce (free for 5 users)
Mid-Size Team (5-20)
Recommendation: Perforce
- Exclusive checkout prevents binary conflicts (critical at this team size)
- Better large-repo performance (100GB+ projects)
- UE5 editor integration is more mature
- Worth the cost at this scale
Large Team (20+)
Recommendation: Perforce (required)
- Industry standard for a reason
- Stream-based workflows handle complex branching
- Enterprise features (replication, proxies) for distributed teams
- All AAA studios use Perforce or a Perforce-compatible solution
Common Workflows
The Daily Workflow (Perforce)
Morning:
1. Sync latest from server (Get Latest)
2. Check out files you need to edit
3. Work on your changes
End of day:
4. Test your changes locally
5. Submit changelist with descriptive message
6. Resolve any conflicts with other developers
The Daily Workflow (Git)
Morning:
1. git pull (get latest changes)
2. git lfs lock [files you'll edit] (lock binary files)
3. Work on your changes
End of day:
4. git add [changed files]
5. git commit -m "Descriptive message"
6. git push
7. git lfs unlock [files you're done with]
Handling Binary Merge Conflicts
Binary files (.uasset, .umap) cannot be merged. When conflicts occur:
Prevention (best): Lock files before editing. Communicate with teammates about who's working on what.
Resolution: Choose one version — either "mine" or "theirs." The other person's changes are lost and must be redone. This is why file locking is essential for binary-heavy projects.
Common Mistakes
Not using LFS for binary files: Storing large binary files in regular Git bloats the repository permanently. Every clone downloads every version of every binary file ever committed.
Forgetting to lock binary files: Two people editing the same .umap file simultaneously guarantees one person loses their work.
Committing generated files: Binaries/, Intermediate/, Saved/, and DerivedDataCache/ should never be committed. They're generated from source and waste storage.
Infrequent commits: Commit small, focused changes frequently. Large, infrequent commits are harder to review, harder to revert, and more likely to conflict.
No commit messages: "Fixed stuff" tells nobody anything. Write messages that explain why you made the change, not just what you changed.
Version control is the foundation of professional game development. Choose the right tool for your team size, set it up properly, and commit to using it consistently. Your future self (and your teammates) will be grateful.