我正在关注来自的文档Git配置页面并尝试将其应用到我的 Windows 7 环境中。当我运行“git diff file0”时,我在 P4Merge 中收到错误:
Errors: '/tmp/cH9ccM_file0' is (or points to) an invalid file.
这是一个真实的陈述。我没有名为“/tmp”的目录。我已签入 C:\tmp、C:\cygwin\tmp 和 %PROGRAMFILES%\Git\tmp。
关于如何将此目录更改为我拥有的目录有什么想法吗?
EDIT:
附加信息。最终,我试图让 WinMerge (或任何外部程序)正常工作。我之前选择使用 P4Merge,因为我无法让 WinMerge 工作,所以我决定使用上述文章中使用的程序。
以下是我的 .gitconfig 的相关部分:
[merge]
tool = extMerge
[mergetool "extMerge"]
cmd = extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = false
[diff]
external = extDiff
extDiff 脚本:
#!/usr/bin/sh
# extDiff
# Wrapper for using an external diff tool in Git
echo "File 1: $2"
echo "File 2: $5"
/usr/local/bin/extMerge "$2" "$5"
extMerge 脚本:
#!/usr/bin/sh
echo $*
/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe $*
因此,如果我更改一个名为 index.html 的文件,并运行 git diff,结果如下:
File 1: /tmp/XfGpOC_index.html
File 2: index.html
正确的解决方案是使用 Cygwincygpath
转换路径格式的工具:
[difftool "p4merge"]
cmd = p4merge \"$(cygpath -w \"$LOCAL\")\" \"$(cygpath -w \"$REMOTE\")\"
同样适用于合并工具:
[mergetool "p4merge"]
keepBackup = false
trustExitCode = true
cmd = p4merge \"$(cygpath -w \"$BASE\")\" \"$(cygpath -w \"$LOCAL\")\" \"$(cygpath -w \"$REMOTE\")\" \"$(cygpath -w \"$MERGED\")\"
请注意,此解决方案(实际上以及问题)仅适用于 Cygwin 环境。我从未让 Git Bash 出现过同样的问题,并且不知道它是否有类似的实用程序cygpath
.
更新:不幸的是, cygpath
实用程序的转换效果很差 /dev/null
与其 Windows 等效项。它将返回无效的 \\.\NUL
路径,因此比较新文件将失败。一旦找到解决方法,我将立即发布另一个更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)