git diff tmp file invalid on windows when using external program on Windows 7
external, git, git-diff, windows-7-x64
Solution
I assume you're using Cygwin... I think the problem is that for Cygwin, /tmp exists, but for Windows, it doesn't (it's somewhere else). For me, Cygwin's /tmp is located in $HOME/AppData/cygwin/tmp and that's where the file was. This might be different depending on how you installed Cygwin. Once you find Cygwin's /tmp, it's just a matter of finding a good environment variable (or creating a new one, if you need) to get a Windows path to the temp file. This worked for me:
[diff]
tool = p4mergeTool
[difftool "p4mergeTool"]
cmd = p4merge.exe $HOMEPATH/AppData/cygwin$LOCAL $REMOTE
I used HOMEPATH instead of HOME, because (it appears) HOMEPATH is the Windows HOME environment variable (\Users\myusername), while HOME is the cygwin HOME environment variable (/cygdrive/c/Users/myusername). From Cygwin, type printenv to see which environment variables might be a good fit.
Problem
I'm following the docs from the Git configuration page and trying to apply this to my Windows 7 environment. When I run say, "git diff file0" I get an error in P4Merge: ``` Errors: '/tmp/cH9ccM_file0' is (or points to) an invalid file. ``` This is a true statement. I do not have a directory called "/tmp". I've checked in C:\tmp, C:\cygwin\tmp, and %PROGRAMFILES%\Git\tmp. Any ideas on how to change this directory to something I do have? EDIT: Additional info. Ultimately, I'm trying to get WinMerge (or any external program) to work. I chose to use P4Merge earlier, because I couldn't get WinMerge to work, so I decided to go with the program that was used in the aforementioned article. Below is the relevant part of my .gitconfig: ``` [merge] tool = extMerge [mergetool "extMerge"] cmd = extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" trustExitCode = false [diff] external = extDiff ``` extDiff script: ``` #!/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 script: ``` #!/usr/bin/sh echo $* /c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe $* ``` So if I change a file called index.html, and run git diff, this is the result: ``` File 1: /tmp/XfGpOC_index.html File 2: index.html ```