2010-06-28 3 views
9

У меня есть Git repo, из которого мне нужно создать файл патча в чем-то отличном от формата git diff по умолчанию. Мой вариант использования: у меня есть неуклюжая старая машина OSF/1, на которой мне нужно применить патч, а программа /bin/patch там не понимает унифицированных различий.Как сделать git-diff создать «контекстный» формат diff?

Если я использую GIT_EXTERNAL_DIFF=diff, в надежде, что я могу затем использовать GIT_DIFF_OPTS=-c запросить контекстный формат, то мой (современный) diff программа жалуется на дополнительные аргументы по своей командной строке:

diff: extra operand `373e5907b789a1398a91f4ceb4ab14e8a0ed4282' 
diff: Try `diff --help' for more information. 
external diff died, stopping at [filename]. 

Установка GIT_EXTERNAL_DIFF=echo показывает, что Git кажется запустить внешнюю программу просмотра различий с:

$GIT_EXTERNAL_DIFF <file2> <file1> <hash> <mode> <tmpfilename> <hash> <mode> 

diff Это путает, который не хочет, чтобы дополнительные аргументы. Есть ли простой способ сказать git diff, чтобы создать формат «контекста» в стиле старого стиля?

(Мой текущий план должен написать скрипт один вкладыш, который вызывает реальную diff с только $1 $2, но я надеюсь, что есть менее неуклюжим способом.)

ответ

5

Конфигурирование difftool делать то, что вы хочу:

$ git config difftool.ctxdiff.cmd 'diff $LOCAL $REMOTE' 
$ git difftool -y -t ctxdiff HEAD~4..HEAD 
+0

Если нам нужно, чтобы получить диф в формате контекста между ними 2 фиксаций, где нам нужно старое, фиксации и нового коммита в, 'git difftool -y -t ctxdiff oldCommitHash newCommitHash' –

8

Там нет необходимости настраивать пользовательский difftool, просто используйте параметр -x:

$ git difftool -y -x "diff -c" | less 

Или настроить псевдоним сделать простой «мерзавец cdiff» Вывод команды в диф контекст стиля:

$ git config --global alias.cdiff 'difftool -y -x "diff -c"' 
$ git cdiff | less 
+0

Не могли бы вы объяснить мне, как получить контекст diff из двух коммитов. Допустим, что соответствующие хэши-коммиты - 'b299g2' и' f242g3'? –

+0

Почему мы вставляем '' diff -c ''в качестве опции –

Смежные вопросы