Como usar o WinMerge como a ferramenta Diff para o Mercurial

19

Estou usando o sistema de controle de versão distribuída do Mercurial, e estou pensando como posso configurá-lo para usar o WinMerge em vez de sua própria ferramenta de comparação interna. Eu já tenho o WinMerge como a ferramenta de mesclagem, mas eu quero que o Mercurial use o WinMerge quando eu digitar:

hg diff

Existe alguma maneira de fazer isso, ou estou preso com a ferramenta de comparação interna do Mercurial?

quanticle
fonte

Respostas:

23

De TortoiseHg FAQ :

Adicione estas linhas ao seu arquivo pessoal Mercurial.ini

[extensions]
extdiff =

[extdiff]
cmd.winmerge = C:\Program Files\WinMerge\WinMergeU.exe
opts.winmerge = /e /x /u /wl

Agora, execute a ferramenta Configurações globais. Na aba TortoiseHg, você deve ver o winmerge disponível na lista drop-down do Visual Diff Command. Selecione winmerge, aplique e feche.

Esta mesma abordagem pode ser usada para adicionar quase qualquer ferramenta de comparação visual, mas esteja ciente de que sua ferramenta de comparação deve ser capaz de suportar diffs de diretório se for usada pelo TortoiseHg, a menos que você esteja usando a versão 0.8 ou posterior.

Joel também forneceu uma solução Aqui no caso de você executar o Mercurial no Cygwin.

Explicação dos argumentos da linha de comando do WinMerge aqui . Resumo:

  • /e permite que você feche o WinMerge com um único pressionamento de tecla Esc
  • /x fecha WinMerge (depois de exibir um diálogo de informações) quando você iniciar uma comparação de arquivos idênticos
  • /u Impede que o WinMerge adicione qualquer caminho (esquerdo ou direito) à lista Most Recently Used (MRU)
  • /wl abre o lado esquerdo como somente leitura
cschol
fonte
Eu não estou usando o TortoiseHG, nem estou executando o Mercurial no Cygwin. Eu estou usando o instalador de linha de comando padrão Mercurial de mercurial.berkwood.com . Sua solução funcionou, no sentido de que eu sou capaz de digitar 'hg winmerge & lt; file & gt;' para ver o diff entre ele e a versão anterior, mas 'hg diff & lt; file & gt;' ainda traz a mesma ferramenta de comparação (bastante feia). Ainda assim, é melhor que nada.
quanticle
Eu acho que esta resposta assume que você irá editar o Mercurial.ini no diretório TortoiseHg (eg C: \ Program Files \ TortoiseHg). Se você editar aquele no diretório do Mercurial (por exemplo, C: \ Program Files \ Mercurial) então isso não funcionará (pelo menos não para mim).
Ashley Davis
também c: \ Arquivos de programas (x86) \ WinMerge \ WinMergeU.exe
Avram
Certifique-se de não colocar aspas ao redor do caminho para o WinMerge no arquivo de configuração, ou ele não funcionará.
Drealmer
7

É assim que funciona para mim - pura linha de comando mercurial diferente de tortoisehg

Primeiro, edite o arquivo (sob uma janela de 64 bits)

C: \ Arquivos de Programas (x86) \ Mercurial \ Mercurial.ini

[extensions]
; must uncomment this line
extdiff =

[extdiff]
; i'm using winmerge unicode version
cmd.winmerge = C:\Program Files (x86)\WinMerge\WinMergeU.exe
; it explains winmerge command line parameters here: http://winmerge.org/docs/manual/CommandLine.html
opts.winmerge = /r /e /x /u /wl

Então, você pode usar "hg winmerge ..." em vez de "hg diff ..."

renfeng
fonte
Eu acho útil rodar o winmerge em segundo plano para que eu possa ver as alterações enquanto configura a mensagem de commit e também mostrar estatísticas sobre quais arquivos foram alterados na linha de comando. Para fazer isso, coloque um arquivo de lote no diretório mercurial que contém start / b hmer winmerge & lt; NEWLINE & gt; hg diff --stat
danio
3

Bem, as respostas dadas anteriormente não me dão efeitos desejados. Eles não permitem fazer revisões diferentes e editar no lugar (eu quero dizer a mesma funcionalidade que está disponível para o TortoiseSVN da caixa). Para fazer isso eu adicionei adicionalmente ao mercurial.ini esta seção:

[merge-tools]
winmerge.regkey=Software\Thingamahoochie\WinMerge\
winmerge.regname=Executable
winmerge.priority=-10
winmerge.args=/e /x /wl /ub /dl other /dr local $other $local $output
winmerge.fixeol=True
winmerge.checkchanged=True
winmerge.gui=True
winmerge.diffargs=/r /e /x /ub /wl /dl '$plabel1' /dr '$clabel' $parent $child
winmerge.diff3args=
winmerge.dirdiff=True

Isso é tirado de http://blog.stevehorn.cc/blog/easy-mercurial-visual-diff-between-two.html

alehro
fonte