Re: git difftool and proper path escaping on windows
- From
Philip Oakley <philipoakley@iee.org>
- Date
- May 10, 2015, 21:09 UTC
- Message-ID
- <303F4B003829461AB3D516B1837C17E1@PhilipOakley>
- In-Reply-To
- <F14B985A-C968-445A-A3F7-10AE425E7029@gmail.com>
From: "David Aguilar" <davvid@gmail.com>
Show 48 quoted lines
> On May 8, 2015 10:31:05 AM PDT, Phil Susi <phillsusi@gmail.com> 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.