Scene & asset VCS integration (JSON merge driver, binary diff, LFS advice)

Motivation

The single biggest pain point for teams using any game engine in git is merge conflicts in scene/prefab files. Turian uses JSON for scenes which is mergeable in principle, but needs explicit tooling to make it reliable. AAA studios need this solved at the infrastructure level.

Goal

Make Turian projects git-friendly by default: a smart merge driver for scene JSON, a CLI diff tool for assets, and built-in LFS guidance for binary assets.

Tasks

Git merge driver

  • turian-cli mergedriver <base> <ours> <theirs> <output> — semantic merge of scene JSON (merge GameObjects by GUID, detect real conflicts vs. parallel additions)
  • .gitattributes template injected by turian-cli create-project: routes *.scene.json through the merge driver
  • Conflict markers with GUID-annotated hunks (human-readable "Object 'Player' moved vs. renamed")

Diff tool

  • turian-cli diff <scene-a> <scene-b> — human-readable semantic diff (added/removed/changed objects + components)
  • git difftool integration (register as turian-mergetool)

Binary assets

  • turian-cli lfs-check <project> — audits which tracked files should be in Git LFS, reports oversized blobs
  • .gitattributes template pre-populates LFS patterns for meshes, textures, audio, compiled shaders

Studio UI

  • "Git status" badge on assets (modified/conflict/untracked) using git status --porcelain
  • Conflict resolver panel for scene files: side-by-side object list with accept/reject per conflict

Acceptance Criteria

  • Two branches that each add a different GameObject to the same scene merge cleanly without a conflict.
  • turian-cli diff produces human-readable output.
  • New projects get a .gitattributes with LFS patterns and the merge driver registered.
  • (JSON scene format, prerequisite), #32 (closed) (prefab merge follows the same driver), #15 (CLI commands).
Edited by Bruno Massa