Da Git1.6.3, puoi usare lo script git difftool : vedi la mia risposta qui sotto .
Potrebbe essere questo articolo che ti aiuterà. Ecco le parti migliori:
Esistono due modi diversi per specificare uno strumento diff esterno.
Il primo è il metodo che hai usato, impostando la variabile GIT_EXTERNAL_DIFF. Tuttavia, la variabile dovrebbe puntare al percorso completo dell'eseguibile. Inoltre, l'eseguibile specificato da GIT_EXTERNAL_DIFF verrà chiamato con un set fisso di 7 argomenti:
path old-file old-hex old-mode new-file new-hex new-mode
Poiché la maggior parte degli strumenti diff richiederà un ordine diverso (e solo alcuni) degli argomenti, molto probabilmente dovrai specificare uno script wrapper, che a sua volta chiama il vero strumento diff.
Il secondo metodo, che preferisco, è configurare lo strumento diff esterno tramite "git config" . Ecco cosa ho fatto:
1) Crea uno script wrapper "git-diff-wrapper.sh" che contiene qualcosa di simile
-->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)--
Come puoi vedere, solo il secondo ("vecchio file") e il quinto ("nuovo file") verranno passati allo strumento diff.
2) Digitare
$ git config --global diff.external <path_to_wrapper_script>
al prompt dei comandi, sostituendolo con il percorso di "git-diff-wrapper.sh", quindi il file ~ / .gitconfig contiene
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Assicurarsi di utilizzare la sintassi corretta per specificare i percorsi dello script wrapper e dello strumento diff, ovvero utilizzare la barra diretta anziché le barre rovesciate. Nel mio caso, l'ho fatto
[diff]
external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"
in .gitconfig e
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
nello script wrapper. Badate al "gatto" finale!
(Suppongo che " | cat
" sia necessario solo per alcuni programmi che potrebbero non restituire uno stato di ritorno corretto o coerente. Potresti provare senza il gatto finale se il tuo strumento diff ha uno stato di ritorno esplicito)
( Diomidis Spinellis aggiunge nei commenti :
Il cat
comando è richiesto, perché diff(1)
, per impostazione predefinita, esce con un codice di errore se i file differiscono.
Git si aspetta che il programma diff esterno esca con un codice di errore solo se si è verificato un errore reale, ad esempio se ha esaurito la memoria.
Reindirizzando l'uscita git
per cat
il codice di errore diverso da zero viene mascherato.
Più efficacemente, il programma potrebbe essere eseguito exit
con argomento 0)
Quella (l'articolo citato sopra) è la teoria dello strumento esterno definita attraverso il file di configurazione (non attraverso la variabile d'ambiente).
In pratica (ancora per la definizione del file di configurazione dello strumento esterno), puoi fare riferimento a: