Desde o Git1.6.3, você pode usar o script git difftool : veja minha resposta abaixo .
Pode ser que este artigo o ajude. Aqui estão as melhores partes:
Existem duas maneiras diferentes de especificar uma ferramenta de comparação externa.
O primeiro é o método que você usou, definindo a variável GIT_EXTERNAL_DIFF. No entanto, a variável deve apontar para o caminho completo do executável. Além disso, o executável especificado por GIT_EXTERNAL_DIFF será chamado com um conjunto fixo de 7 argumentos:
path old-file old-hex old-mode new-file new-hex new-mode
Como a maioria das ferramentas diff requer uma ordem diferente (e apenas alguns) dos argumentos, você provavelmente precisará especificar um script de wrapper, que por sua vez chama a ferramenta diff real.
O segundo método, que eu prefiro, é configurar a ferramenta diff externa via "git config" . Aqui está o que eu fiz:
1) Crie um script de wrapper "git-diff-wrapper.sh" que contenha algo como
-->8-(snip)--
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--
Como você pode ver, apenas o segundo argumento ("arquivo antigo") e o quinto ("arquivo novo") serão passados para a ferramenta diff.
2) Tipo
$ git config --global diff.external <path_to_wrapper_script>
no prompt de comando, substituindo pelo caminho para "git-diff-wrapper.sh", para que seu ~ / .gitconfig contenha
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Certifique-se de usar a sintaxe correta para especificar os caminhos para o script do wrapper e a ferramenta diff, ou seja, use barras invertidas em vez de barras invertidas. No meu caso, eu tenho
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
em .gitconfig e
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
no script do wrapper. Cuidado com o "gato" à direita!
(Suponho que ' | cat
' seja necessário apenas para alguns programas que talvez não retornem um status de retorno adequado ou consistente. Você pode tentar sem o gato à direita, se sua ferramenta diff tiver um status de retorno explícito)
( Diomidis Spinellis acrescenta nos comentários :
O cat
comando é necessário, porque diff(1)
, por padrão, sai com um código de erro se os arquivos diferirem.
O Git espera que o programa diff externo saia com um código de erro apenas se ocorrer um erro real, por exemplo, se ficar sem memória.
Ao canalizar, a saída git
para cat
o código de erro diferente de zero é mascarada.
Mais eficientemente, o programa pode ser executado exit
com um argumento de 0.)
Que (o artigo citado acima) é a teoria para a ferramenta externa definida através do arquivo de configuração (não através da variável de ambiente).
Na prática (ainda para a definição do arquivo de configuração da ferramenta externa), você pode consultar: