配置UnityYAMLMerge与Git时提示“文件或目录不存在”
Git合并冲突时UnityYAMLMerge路径找不到的问题
执行git merge遇到冲突后,运行git mergetool提示<C:/Q/test-games/unityEditor/2021.3.5f1c1/Editor/Data/Tools/UnityYAMLMerge.exe>: No such file or directory。
已确认:
- Git配置中添加了UnityYAMLMerge相关设置,路径直接运行可正常启动程序
- Unity项目设置:VersionControl设为“Visible meta files”,Editor-AssetSerialization-Mode设为“ForceText”
- 尝试过修改路径为双反斜杠、重命名含连字符文件夹,问题依旧
Git Bash执行git mergetool输出
ASUS@LAPTOP-5COEIH28 MINGW64 /c/Q/test-games/project/unity/WarSimulator/WarSimulator (test1|MERGING) $ git mergetool Merging: Library/ArtifactDB Library/Bee/backend_profiler0.traceevents Library/Bee/fullprofile.json Library/Bee/tundra.digestcache Library/Search/transactions.db Library/SourceAssetDB Library/StateCache/SceneView/8c/8cd7c613bf844de3b80696e27a479d5e.json Logs/AssetImportWorker0-prev_BACKUP_859-prev.log Logs/AssetImportWorker0-prev_BASE_859-prev.log Logs/AssetImportWorker1.log UserSettings/Layouts/default-2021.dwlt Normal merge conflict for 'Library/ArtifactDB': {local}: modified file {remote}: modified file /mingw64/libexec/git-core/git-mergetool--lib: line 141: <C:/Q/test-games/unityEditor/2021.3.5f1c1/Editor/Data/Tools/UnityYAMLMerge.exe>: No such file or directory Library/ArtifactDB seems unchanged. Was the merge successful [y/n]?
gitattributes内容
# Auto detect text files and perform LF normalization * text=auto *.unity binary *.prefab binary *.asset binary
Git config内容
[branch "main"] remote = origin merge = refs/heads/main [merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = '<C:\\Q\\test-games\\unityEditor\\2021.3.5f1c1\\Editor\\Data\\Tools\\UnityYAMLMerge.exe>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED" [branch "test1"] remote = origin merge = refs/heads/test1 [merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = '<C:/Q/test-games/unityEditor/2021.3.5f1c1/Editor/Data/Tools/UnityYAMLMerge.exe>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED" [branch "test2"] remote = origin merge = refs/heads/test2
解决方法
清理重复的Git配置项
Git config中重复定义了[merge]和[mergetool "unityyamlmerge"],保留一组即可。打开配置文件(全局或项目级),删除重复块,只保留:[merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = 'C:/Q/test-games/unityEditor/2021.3.5f1c1/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"移除路径两端的尖括号
错误提示中路径被尖括号包裹,导致Git无法识别正确路径。确保cmd中的程序路径没有<>,仅用单引号包裹即可。改用Git Bash兼容的路径格式
在Git Bash中,可将Windows路径转换为MinGW格式(把C:/改为/c/),修改后的cmd如下:cmd = '/c/Q/test-games/unityEditor/2021.3.5f1c1/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"验证配置生效
执行git config --list查看配置,确认merge.tool和mergetool.unityyamlmerge.cmd设置正确且无重复。忽略Unity Library目录
当前冲突文件位于Library目录,这是Unity的缓存目录,无需提交到Git。将Library/添加到.gitignore,避免后续出现不必要的合并冲突。
内容的提问来源于stack exchange,提问作者Atom Hui
相关产品推荐
相关产品推荐

