3

我正在关注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。

关于如何将此目录更改为我拥有的东西的任何想法?

编辑:

附加信息。最终,我试图让 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
4

3 回答 3

12

正确的解决方案是使用 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 Bash 出现过同样的问题,也不知道它是否有类似于cygpath.

更新:不幸的是,该实用程序在转换 为 Windows 等效项时cygpath 表现不佳。 /dev/null 它将返回无效的 \\.\NUL 路径,因此区分新文件将失败。我将在找到解决方法后立即发布另一个更新。

于 2014-10-10T10:31:23.667 回答
8

我假设您使用的是 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

我使用 HOMEPATH 而不是 HOME,因为(看起来)HOMEPATH 是 Windows HOME 环境变量(\Users\myusername),而 HOME 是 cygwin HOME 环境变量(/cygdrive/c/Users/myusername)。在 Cygwin 中,键入 printenv 以查看哪些环境变量可能适合。

于 2013-12-11T03:58:09.283 回答
0

看起来你的 gitconfig 有错误。你见过这个Stackoverflow 问题吗?

在 git 开始直接支持 P4Merge 之前,我很久以前就写过关于设置 P4Merge 的博客,但如果您遇到困难,它仍然可以工作:http: //danlimerick.wordpress.com/2011/06/19/git-for-window-tip-use-p4merge -作为合并工具/

编辑:更明确地说,转义是你的问题。在我的 P4Merge 的 .gitconfig 文件中,它看起来像这样:

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

所以试试这个:

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

如果您从命令行设置或直接在 .gitconfig 文件中进行更改,则转义会有所不同。

于 2013-05-14T21:13:57.077 回答