在 Windows 7 上使用外部程序时,git diff tmp 文件在 Windows 上无效

2023-12-05

我正在关注来自的文档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(使用前将#替换为@)

在 Windows 7 上使用外部程序时,git diff tmp 文件在 Windows 上无效 的相关文章

随机推荐