2012-07-04 10 views
10

Chcę, aby git diff wysyłał normalne, zwykłe stare wyjście diff (nie zunifikowane różnice, a nie różnice kontekstowe).Jak utworzyć format różnicowy "git diff" (niejednolity, bez kontekstu)?

Chcę to:

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

nie chcę wyjście jednolity:

$ 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 

nie chcę wyjście kontekst:

$ 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 

Próbowałem różnych git difftool --tool= args z bez powodzenia, i nie znalazłem nic istotnego w git diff --help

Odpowiedz

12
git difftool --extcmd=diff 

lub bez monitowania:

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

To git difftool zamiast git diff ale robi to, co chcę.

+0

Czy mogę zapytać, dlaczego potrzebujesz tego typu danych i jakie jest znaczenie'> 'i' <' –

1

Można użyć tego samego skryptu (patrz man git (1) dla szczegółów):

$ 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

próbowałem tego, ale pojawia się błąd: diff.sh git diff HEAD^.. HEAD: 1: diff.sh git diff HEAD^.. GŁOWA: diff.sh: Nie znaleziono zewnętrzny różn zmarł, zatrzymując at subdir/file3. "Na szczęście, znalazłem o wiele łatwiejsze rozwiązanie podczas googlowania, które umieszczam w oddzielnej odpowiedzi: –