Como posso configurar o Mercurial usar WinMerge para fusões, sob cygwin?
Pergunta
Quando Mercurial está funcionando sob cygwin, é um pouco complicado para descobrir como desova WinMerge para resolver conflitos de mesclagem. Como posso fazer isso?
Solução
O truque é que os caminhos cygwin não são o mesmo que os caminhos do Windows, então você precisa de um pequeno script que converte os caminhos Cygwin para caminhos do Windows antes de passá-los como argumentos para WinMerge.
Aqui está como fazê-lo:
(1) Criar um script shell em /usr/bin/winmerge
da seguinte forma:
#!/bin/sh
"/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3`
Nota: cygpath
nomes de caminho convertidos. Se WinMerge não está no local padrão, altere o caminho aqui.
(2) Faça esse arquivo executável
chmod +x /usr/bin/winmerge
(3) Adicione o seguinte ao seu arquivo ~/.hgrc
:
[ui]
merge = winmerge
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Nota! Você provavelmente já tem uma seção [ui] com o seu nome nele. Lembre-se de fundir as minhas alterações com o seu, não basta adicionar uma nova seção [ui]. Por exemplo, meus .hgrc esta aparência:
[ui]
username = Joel Spolsky <spolsky@example.com>
merge = winmergeu
[extensions]
fetch =
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Outras dicas
Aqui é a linha de shell script que funciona para Subversion / cygwin / WinMerge. A principal diferença é que argumentos usar.
/cygdrive/c/Program\ Files/WinMerge/WinMergeU.exe /e /ub /dl "$3" /dr "$5" "`cygpath -aw $6`" "`cygpath -aw $7`" &
Note que este exemplo também define os campos de descrição e lançamentos as comparações no fundo, para que todos os diffs são lançados ao mesmo tempo. Se você não gosta disso, retire o '&'.
Se você não sabe o que o seu programa de controle de revisão está passando você, tente adicionar 'echo $ @' para seu script shell. Ele irá imprimir os argumentos passados ??para o script.