From: Philip Oakley Date: Sun, 10 May 2015 21:09:58 GMT Subject: Re: git difftool and proper path escaping on windows Message-ID: <303F4B003829461AB3D516B1837C17E1@PhilipOakley> In-Reply-To: From: "David Aguilar" > On May 8, 2015 10:31:05 AM PDT, Phil Susi wrote: >>I'm trying to have git difftool run winmerge to compare files, but it >>seems to be doing something silly with path translation. My first >>attempt was: >> >>git difftool -x /c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe >> >>To which it responded: >> >>C:\Users\psusi\AppData\Local\Programs\Git/libexec/git-core\git-difftool--helper: >> eval: line 61: syntax error near unexpected token `(' >> >>C:\Users\psusi\AppData\Local\Programs\Git/libexec/git-core\git-difftool--helper: >>eval: line 61: `c:/Program Files (x86)/WinMerge/WinMergeU.exe "$LOCAL" >>"$REMOTE >> >> >>My first thought was that my shell removed the backslash escapes and >>then git tried to pass the remaining command to another shell. So I >>wrapped the path in single quotes, which should pass the escapes to >>git, >>which should pass them to the shell, which should then be able to >>parse >> >>the spaces in parenthesis in the path, but instead I got this: >> >>Launch 'c:/Program/ Files/ /(x86/)/WinMerge/WinMergeU.exe' >> >>So it appears that git is replacing backslashes with forward slashes, >>then trying to pass that to the shell, which doesn't work. Any idea >>how >>to fix or workaround this bug? > > > paths and executing external programs on windows is confusing and > error-prone for a simple unix user such as myself. > > I think you might be able to work around the difficulties by making > the tool available in your $PATH, that way you don't have to play > shell quoting / escaping games. > > I hope that helps. if you discover a different solution, I'd be happy > to document it so that windows users don't have to rediscover how to > do it in the future. > > let me know how it goes. > cheers > A quick web browse found https://gist.github.com/shawndumas/6158524 as one example of a winmerge configuration. my personal .gitconfig has [difftool "WinMerge"] path = C:/Program Files/WinMerge/WinMergeU.exe cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' /e /x /u $LOCAL $REMOTE [mergetool "WinMerge"] path = C:/Program Files/WinMerge/WinMergeU.exe cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' /e /x /u $LOCAL $REMOTE $MERGED trustExitCode = false (excuse whitespace damage) though I don't use it much.