2012-07-04 13 views
10

Desidero git diff emettere un'emissione diff normale, normale (diff non unificata e non diff di contesto).Come rendere "git diff" l'output normale nel formato diff (non unificato, non contestualizzato)?

voglio che questo:

$ diff file1 file2 
2c2 
< b 
--- 
> B 
4d3 
< d 
5a5 
> f 

Non voglio uscita unificato:

$ diff -u file1 file2 
--- file1  2012-07-04 07:57:48.000000000 -0700 
+++ file2  2012-07-04 07:58:00.000000000 -0700 
@@ -1,5 +1,5 @@ 
a 
-b 
+B 
c 
-d 
e 
+f 

non voglio uscita contesto:

$ diff -c file1 file2 
*** file1  2012-07-04 07:57:48.000000000 -0700 
--- file2  2012-07-04 07:58:00.000000000 -0700 
*************** 
*** 1,5 **** 
    a 
! b 
    c 
- d 
    e 
--- 1,5 ---- 
    a 
! B 
    c 
    e 
+ f 

Ho provato le varie git difftool --tool= args con senza fortuna, e non ho trovato nulla di rilevante in git diff --help

risposta

12
git difftool --extcmd=diff 

o, senza chiedere conferma:

git difftool --extcmd=diff --no-prompt 

Questo è git difftool piuttosto che git diff ma sta facendo quello che voglio.

+0

posso chiedere perché hai bisogno di questo tipo di dati, e qual è il significato di'> 'e' <' –

1

È possibile utilizzare lo stesso script (vedi man git (1) per i dettagli):

$ cat diff.sh 
#!/bin/sh 
# get args: path old-file old-hex old-mode new-file new-hex new-mode 

diff "$2" "$5" 

return=$? 
if [ $return -le 1 ]; then 
    exit 0 
else 
    exit $return 
fi 

$ GIT_EXTERNAL_DIFF=./diff.sh git diff HEAD^..HEAD 
+0

Ho provato questo, ma ho l'errore: diff.sh git diff TESTA^.. TESTA: 1: diff.sh TESTA git diff^.. TESTA: diff.sh: non trovato diff esterno è morto, l'arresto in subdir/file3. "Fortunatamente, ho trovato una soluzione molto più semplice durante la ricerca su google, che ho inserito in una risposta separata. –