在Windows 7上使用外部程序时的git无效在Windows DIFF tmp文件(git di

2019-09-03 05:33发布

我下面从该文档的Git配置页面 ,并试图将其应用到我的Windows 7环境。 当我运行说,“git的差异file0”我得到了P4Merge一个错误:

Errors: '/tmp/cH9ccM_file0' is (or points to) an invalid file.

这是一个真实的陈述。 我没有一个叫做“/ 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

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的差异,这是结果:

File 1: /tmp/XfGpOC_index.html
File 2: index.html

Answer 1:

我假设你正在使用Cygwin ...我认为问题是,Cygwin的,/ tmp目录存在,但对于Windows,它不(这是其他地方)。 对我来说,Cygwin的/ tmp目录位于$ HOME /应用程序数据/ cygwin的/ tmp和这其中的文件了。 这可能取决于你如何安装了Cygwin是不同的。 一旦你找到Cygwin的/ tmp目录,它只是一个寻找一个良好的环境变量(或创建一个新的,如果需要),以获得一个Windows路径临时文件的问题。 这为我工作:

[diff]
   tool = p4mergeTool
[difftool "p4mergeTool"]
   cmd = p4merge.exe $HOMEPATH/AppData/cygwin$LOCAL $REMOTE

我用HOMEPATH代替HOME,因为(出现的话)HOMEPATH是Windows HOME环境变量(\ Users \用户名为myUsername),而HOME是cygwin的HOME环境变量(/ cygdrive / C /用户/名为myUsername)。 从Cygwin的,键入printenv看哪些环境变量可能是一个不错的选择。



Answer 2:

正确的解决办法是使用Cygwin的cygpath工具转换路径格式:

[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猛砸表现出同样的问题,不知道是否有类似于公用 cygpath

更新:不幸的是, cygpath 工具做的不好转换 /dev/null 它的Windows等价的。 它会返回无效 \\.\NUL 路径,所以版本比较新的文件将失败。 我会尽快,因为我觉得它发出与解决方法另一个更新。



Answer 3:

看起来像你的gitconfig错误。 你见过这个#1的问题 ?

我的博客上讲述前设置P4Merge年龄之前的git开始直接支持,但如果你坚持它仍然有效: http://danlimerick.wordpress.com/2011/06/19/git-for-window-tip-use-p4merge -as-合并工具/

编辑:为了更明确,那就是你的问题了逃逸。 在P4Merge我的.gitconfig文件,它看起来像这样:

cmd = p4merge.exe /\"$BASE/\" /\"$LOCAL/\" /\"$REMOTE/\" /\"$MERGED/\"

所以,试试这个:

cmd = extMerge /\"$BASE/\" /\"$LOCAL/\" /\"$REMOTE/\" /\"$MERGED/\"

有一个与你在命令行直接在你的.gitconfig文件中设置,或做出改变逃逸的差异。



文章来源: git diff tmp file invalid on windows when using external program on Windows 7