2012-07-04 2 views
10

Я хочу, чтобы git diff вывел нормальный, простой старый выход diff (не унифицированный diff, а не diff контекста).Как сделать вывод «git diff» нормальный формат diff (не унифицированный, неконтекстный)?

Я хочу это:

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

Я не хочу унифицированный выход:

$ 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 

Я не хочу выходной контекст:

$ 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 

Я попробовал различные git difftool --tool= арг с не повезло, и я не нашел ничего полезного в git diff --help

ответ

12
git difftool --extcmd=diff 

или без подсказки:

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

Это git difftool, а не git diff но делает то, что я хочу.

+0

Могу ли я спросить, зачем вам нужен такой тип данных, и каково значение'> 'и' <' –

1

Вы можете использовать тот же сценарий (см человека мерзавец (1) для более подробной информации):

$ 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

Я пробовал это, но получаю ошибку: diff.sh git diff HEAD^.. HEAD: 1: diff.sh git diff HEAD^.. HEAD: diff.sh: не найден внешний diff умер, останавливаясь на subdir/file3. «К счастью, я нашел гораздо более легкое решение во время поиска в googling, которое я ввел в отдельный ответ. –