Pergunta

Quando Mercurial está funcionando sob cygwin, é um pouco complicado para descobrir como desova WinMerge para resolver conflitos de mesclagem. Como posso fazer isso?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top