Git e WinMerge (msysgit)
Pergunta
Eu li sobre um bilhão de perguntas e respostas sobre esse mesmo assunto e segui todas as instruções ao pé da letra.Mas ainda estou tendo dores de cabeça ao tentar configurar o Git para diferenciar e mesclar usando o WinMerge.
Eu executei as seguintes etapas usando o terminal Git:
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Também configurei um script em um diretório incluído no meu PATH
variável que diz:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2""
Quando eu executo
git mergetool
No terminal Git, vejo:
Merging:
first.txt
Normal merge conflict for 'first.txt':
{local}: modified
{remote}: modified
Launching WinMergeU.exe:
Então me parece que o $LOCAL
e $REMOTE
variáveis não estão passando nada para o winmerge.sh
roteiro.O que estou fazendo de errado aqui?Eu tenho que assumir que está na parte de configuração.
Solução
Comparado com o meu resposta anterior (ou Este, ou Aquele), suas etapas incluem aspas duplas extras no final de winmerge.sh
roteiro
#!/bin/sh echo Launching WinMergeU.exe: $1 $2 "C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2"" ^ | (this shouldn't be here)
Dito isto, essas respostas foram sobre o uso do difftool winmerge
, que não suporta Mesclagem de 3 vias (existe apenas local e remoto, sem base).
Para uma verdadeira ferramenta de mesclagem, eu recomendaria kdiff3
(como em "É possível que o git-merge ignore as diferenças de final de linha?") ou araxis
(conforme descrito em "Como definir Araxis como ferramenta de comparação/mesclagem para MSYS git?"), onde você pode ver o três variáveis (locais, remotas e base) usado.