V2 starts in the Oshun Git monorepo with Git LFS enforcing the Unreal binary asset policy. When project scale requires Perforce, migrate only the Unreal project subtree and keep source code mirrored from Git until the release engineering owner cuts over the full workspace.
Migration Boundary#
- Git source:
V2/ue/ - Perforce depot root:
//Oshun/V2 - Initial import path:
//Oshun/V2/main/V2/ue/... - Git attributes source of truth before migration:
V2/ue/.gitattributes and root
.gitattributes - Perforce ignore file after migration: V2/ue/.p4ignore
Stream Layout#
Use streams so binary assets, cooked-release branches, and integration work have predictable ownership:
//Oshun/V2/main mainline stream, protected release candidate source
//Oshun/V2/dev development stream for daily integration
//Oshun/V2/release release stream cut from main for certification fixes
//Oshun/V2/art task stream for large asset drops and vendor ingest
//Oshun/V2/cinematics task stream for Sequencer, audio, and mocap integration
Required stream options:
mainis the only stream allowed to feed BuildGraph release jobs.devintegrates frommaindaily and copies up after validation.artandcinematicsare task streams with short-lived ownership windows.- Stream views include
V2/ue/...and exclude monorepo package directories outside the Unreal project.
Lock-Required Types#
Use exclusive checkout for Unreal package files that are unsafe to merge:
*.uasset*.umap*.ubulk*.uexp*.utoc*.ucas
These map to binary+l, matching the lockable Git LFS policy.
Use writable binary storage for source assets that can be replaced or reviewed through their source tools:
*.fbx*.wav*.exr*.ktx2*.usd*.usdc*.usdz
These map to binary+w.
Typemap#
Install this typemap before the first import:
Typemap:
binary+l //Oshun/V2/.../V2/ue/....uasset
binary+l //Oshun/V2/.../V2/ue/....umap
binary+l //Oshun/V2/.../V2/ue/....ubulk
binary+l //Oshun/V2/.../V2/ue/....uexp
binary+l //Oshun/V2/.../V2/ue/....utoc
binary+l //Oshun/V2/.../V2/ue/....ucas
binary+w //Oshun/V2/.../V2/ue/....fbx
binary+w //Oshun/V2/.../V2/ue/....wav
binary+w //Oshun/V2/.../V2/ue/....exr
binary+w //Oshun/V2/.../V2/ue/....ktx2
binary+w //Oshun/V2/.../V2/ue/....usd
binary+w //Oshun/V2/.../V2/ue/....usdc
binary+w //Oshun/V2/.../V2/ue/....usdz
text //Oshun/V2/.../V2/ue/....ini
text //Oshun/V2/.../V2/ue/....cs
text //Oshun/V2/.../V2/ue/....cpp
text //Oshun/V2/.../V2/ue/....h
text //Oshun/V2/.../V2/ue/....json
text //Oshun/V2/.../V2/ue/....uproject
P4Ignore#
Set P4IGNORE=.p4ignore for all V2 Perforce workspaces. The checked-in
V2/ue/.p4ignore excludes local Unreal output:
Saved/...
Intermediate/...
Binaries/...
DerivedDataCache/...
.vs/...
*.sln
*.suo
*.xcodeproj/...
*.xcworkspace/...
Makefile
compile_commands.json
Saved/AutomationReports/...
Saved/Profiling/...
Saved/Logs/...
Import Procedure#
- Freeze Git LFS writes to
V2/ue/Contentfor the migration window. - Verify
python3 V2/ue/Tools/check-source-control-policy.pyandpython3 V2/ue/Tools/check-v2-source-control-lfs.pypass on the Git tip. - Install the typemap, create streams, and set
P4IGNORE=.p4ignore. - Import
V2/ue/...into//Oshun/V2/main/V2/ue/.... - Run
p4 reconcileand confirm package files open asbinary+l. - Run the V2 BuildGraph editor compile and Win64 cook from the Perforce workspace before accepting the cutover.
Validation#
Run this validator from the Git repository root:
python3 V2/ue/Tools/check-v2-perforce-migration.py