Pages

sábado, 1 de maio de 2010

Visualizando diff no Git com o Meld

A ferramenta de diff do Git pode muitas vezes ser confusa e difícil de entender. Contudo, existe uma maneira de configurar o Git para usar uma ferramenta externa de visualização do diff. Nesse caso eu vou usar o Meld que é uma ferramenta excelente que te permite visualizar o diff desta forma:

Tela do diff no Meld

Em primeiro lugar, você deve instalar o Meld:

$ sudo apt-get install meld
Em seguida, configurar o git para usar o Meld como ferramenta externa para diff:

$ git config --global diff.external meld
Se agora você for em um diretório versionado com git e der um git diff irá ocorrer um erro como este:

$ git diff arquivo_qualquer
external diff died, stopping at arquivo_qualquer

Esse erro ocorre pelo fato do Git mandar 7 parâmetros para a ferramenta externa de diff, enquanto o Meld recebe apenas dois deles (os nomes dos arquivos para comparar).

Uma maneira de contornar isso é escrever um script para formatar os parâmetros antes de manda-los para o Meld. Para isso, crie em qualquer lugar (recomendo em ~/.config) um script em shell com qualquer nome (recomendo git_meld_diff.sh) contendo o seguinte conteúdo:

#!/bin/bash
meld "$5" "$2"

Agora podemos configurar o Git para para fazer o diff usando o script que criamos (lembre-se de mudar o caminho e o nome do arquivo para o seu caso)

$ git config --global diff.external /home/hugo/.config/git_meld_diff.sh
Agora, quando você fizer o diff, o Meld irá abrir corretamente e você terá um diff como o presentado na imagem.

Este post é uma adaptação deste post do Nathan Hoad.

Nota: Este post estava no meu blog antigo e não tive como trazer os comentários. Como os comentários foram relevantes, seguem aqui:
  • Hugo Lopes Tavares

    E aí chará!
    Cara, eu prefiro ver na ordem inversa: a versão modificada e a versão original, acho mais normal.
    Outra coisa que dá pra fazer é não usar o Python, né:

    #!/bin/bash
    meld $5 $2 # a versão atual e depois a original

    Abração!

  • Hugo Lopes Tavares

    Só uma correção:

    #!/bin/bash
    meld "$5" "$2"

    Senão não consegue fazer o meld com arquivos que tenham espaço no nome.

  • Hugo Maia Vieira

    Fala chará!
    Realmente fica melhor ver na ordem: versão modificada - versão original.
    Nem tinha pensado em usar Shell. Muito mais prático.
    Valeu pelas dicas Hugo!

    Abraço!

    Obs.: Como mudei o post, fica aqui a versão anterior sem as modificações que Hugo comentou:

    Antes usava um script em python com o conteúdo:

    #!/usr/bin/python

    import sys
    import os

    os.system('meld "%s" "%s"' % (sys.argv[2], sys.argv[5]))


[ ]'s

Um comentário:

  1. Também é possível utilizar o meld momentaneamente com o seguinte comando:

    git -c diff.external=CAMINHO_DO_SCRIPT_DO_MELD diff ARQUIVO

    ResponderExcluir