jkt*_*vis 3 git external git-diff windows-7-x64
我正在关注Git配置页面中的文档并尝试将其应用到我的Windows 7环境中.当我运行说"git diff file0"时,我在P4Merge中收到错误:
Errors: '/tmp/cH9ccM_file0' is (or points to) an invalid file.
Run Code Online (Sandbox Code Playgroud)
这是一个真实的陈述.我没有名为"/ tmp"的目录.我已经检查了C:\ tmp,C:\ cygwin\tmp和%PROGRAMFILES%\ Git\tmp.
有关如何将此目录更改为我所拥有的内容的任何想法?
编辑:
附加信息.最终,我正在尝试让WinMerge(或任何外部程序)工作.我之前选择使用P4Merge,因为我无法让WinMerge工作,所以我决定使用上述文章中使用的程序.
以下是我的.gitconfig的相关部分:
[merge]
tool = extMerge
[mergetool "extMerge"]
cmd = extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = false
[diff]
external = extDiff
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
extMerge脚本:
#!/usr/bin/sh
echo $*
/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe $*
Run Code Online (Sandbox Code Playgroud)
因此,如果我更改名为index.html的文件,并运行git diff,则结果如下:
File 1: /tmp/XfGpOC_index.html
File 2: index.html
Run Code Online (Sandbox Code Playgroud)
Pow*_*ave 12
正确的解决方案是使用Cygwin的cygpath工具转换路径格式:
[difftool "p4merge"]
cmd = p4merge \"$(cygpath -w \"$LOCAL\")\" \"$(cygpath -w \"$REMOTE\")\"
Run Code Online (Sandbox Code Playgroud)
这同样适用于合并工具:
[mergetool "p4merge"]
keepBackup = false
trustExitCode = true
cmd = p4merge \"$(cygpath -w \"$BASE\")\" \"$(cygpath -w \"$LOCAL\")\" \"$(cygpath -w \"$REMOTE\")\" \"$(cygpath -w \"$MERGED\")\"
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案(以及实际上的问题)仅适用于Cygwin环境.我从来没有让Git Bash表现出同样的问题,也不知道它是否有类似的实用程序cygpath.
更新:不幸的是,该 cygpath 实用程序在转换 /dev/null 为Windows等效项目方面 表现不佳.它将返回无效\\.\NUL 路径,因此传播新文件将失败.我会在找到后立即与解决方法一起发布另一个更新.
我假设你正在使用Cygwin ...我认为问题是对于Cygwin,/ tmp存在,但对于Windows,它没有(它在其他地方).对我来说,Cygwin的/ tmp位于$ HOME/AppData/cygwin/tmp中,这就是文件所在的位置.根据您安装Cygwin的方式,这可能会有所不同.一旦找到Cygwin的/ tmp,只需要找到一个好的环境变量(或者如果需要,可以创建一个新的环境变量)来获取临时文件的Windows路径.这对我有用:
[diff]
tool = p4mergeTool
[difftool "p4mergeTool"]
cmd = p4merge.exe $HOMEPATH/AppData/cygwin$LOCAL $REMOTE
Run Code Online (Sandbox Code Playgroud)
我使用HOMEPATH而不是HOME,因为(看起来)HOMEPATH是Windows HOME环境变量(\ Users\myusername),而HOME是cygwin HOME环境变量(/ cygdrive/c/Users/myusername).从Cygwin中,键入printenv以查看哪些环境变量可能非常合适.