如何让git-diff创建一个“上下文”格式diff?

时间:2010-06-28 00:49:11

标签: git diff

我有一个Git repo,我需要用默认的git diff格式创建补丁文件。我的用例是我有一台笨重的旧OSF / 1机器我需要应用补丁,/bin/patch程序不能理解统一差异。

如果我使用GIT_EXTERNAL_DIFF=diff,希望我可以使用GIT_DIFF_OPTS=-c请求上下文格式diff,那么我的(现代)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?

(我目前的计划是编写一个单线程shell脚本,只用diff调用真实的$1 $2,但我希望有一种不那么尴尬的方式。)

2 个答案:

答案 0 :(得分:9)

无需配置自定义difftool,只需使用-x选项:

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

或者配置别名以使简单的“git cdiff”命令输出上下文式的差异:

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

答案 1 :(得分:5)

配置difftool以执行您想要的操作:

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