Unity YAML 合并指南
Unity YAML 合并:场景、Prefab、Git 与安全工作流
Unity YAML 合并不只是 Git 的文本问题。它是在合并 Unity 序列化对象图,同时保持场景层级、Prefab overrides、引用、脚本和资源身份不被破坏。
Unity YAML 合并的基础设置
先确认项目真的适合文本合并:Unity 资源需要使用文本序列化,`.meta` 文件必须进入版本控制,这样 GUID 才不会在分支之间丢失。
常见做法是让 `.unity`、`.prefab`、`.asset`、`.mat` 和 `.meta` 文件全部由 Git 跟踪,并用 Git attributes 把 Unity 资源交给 UnityYAMLMerge 或团队自己的 merge driver。
- 启用 Visible Meta Files。
- 对场景和 Prefab 使用 Force Text serialization。
- 不要通过删除再重建资源来移动文件;保留原始 `.meta` 才能保留 GUID。
*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.mat merge=unityyamlmerge eol=lf
安全合并与高风险合并
干净的文本合并不等于安全的 Unity 合并。有些变更在 YAML 层面没有冲突,但在 Unity 对象图里会改变层级、引用或组件归属。
决策表
通常安全
不同对象上的独立数值修改、互不重叠的材质参数或普通序列化字段。
需要审查
对象移动、兄弟节点重排、引用重定向、Prefab override 或组件增删。
应阻塞 PR
delete vs edit、missing scripts、dangling GUID、未解决的 conflict markers 或模糊的 Base/Ours/Theirs 选择。
推荐的 Unity YAML 合并流程
让自动合并处理简单案例,把有语义风险的部分交给可审查的流程。审查者需要看到 GameObject、Component、Hierarchy path、Reference、Prefab instance 和 Property path,而不是只看哪段 YAML 更短。
- 先用 UnityYAMLMerge 或 merge driver 处理简单、不重叠的变更。
- 按 Unity 语义分类冲突:both-edited、delete-vs-edit、move-vs-edit、reference retarget、override conflict。
- 在写入文件前预览合并结果。
- 写入后校验 missing scripts、悬空引用和未解决决策。
Unity YAML 合并的 CI 检查
CI 不应该只运行 Unity 测试。它还应该阻止未解决 conflict markers、解析变更的 Unity YAML 资源、校验 missing scripts 和 dangling references,并把语义摘要发布给 reviewer。MergeSight 的 Editor review、3-way context、preview、validation 和 CLI commands 正是为这种流程设计的。
FAQ
什么是 Unity YAML 合并?
它是在 Git 或其他 VCS 中合并 Unity 的文本序列化资源,尤其是 `.unity` 场景和 `.prefab` Prefab 文件。
Git 能安全合并 Unity 场景和 Prefab 吗?
Git 可以合并文本文件,UnityYAMLMerge 可以改善自动合并,但涉及层级、引用、Prefab overrides 和对象身份的变更仍需要 Unity-aware review。
什么时候自动合并有风险?
当两个分支同时改层级、引用、Prefab overrides、脚本、对象身份,或一个分支删除而另一个分支编辑同一对象时,自动合并就有风险。
总结
Unity YAML 合并不只是 Git 的文本问题。它是在合并 Unity 序列化对象图,同时保持场景层级、Prefab overrides、引用、脚本和资源身份不被破坏。
Summary
Git 看到什么
YAML 行、fileID、GUID 和文本冲突。
Unity 看到什么
对象、组件、引用、层级和 Prefab overrides。
团队需要什么
语义审查、预览、显式决策和 CI 校验。
Next step
在真实 Unity 资源上审查这些变更
如果你的团队正在处理 Unity scene、prefab、material 或 YAML asset 的合并风险,可以查看 MergeSight 如何把 raw YAML 转成可审查的 Unity 上下文。