如何让git diff创建一个;上下文“;格式差异?

如何让git diff创建一个;上下文“;格式差异?,git,diff,Git,Diff,我有一个Git repo,需要从中创建一个非默认格式的补丁文件。我的用例是我有一台笨重的旧OSF/1机器,我需要在上面应用补丁,而那里的/bin/patch程序不理解统一的差异 如果我使用GIT\u EXTERNAL\u DIFF=DIFF,希望随后可以使用GIT\u DIFF\u OPTS=-c请求上下文格式DIFF,那么我的(现代)DIFF程序会抱怨其命令行上的额外参数: diff: extra operand `373e5907b789a1398a91f4ceb4ab14e8a0ed428

我有一个Git repo,需要从中创建一个非默认格式的补丁文件。我的用例是我有一台笨重的旧OSF/1机器,我需要在上面应用补丁,而那里的
/bin/patch
程序不理解统一的差异

如果我使用
GIT\u EXTERNAL\u DIFF=DIFF
,希望随后可以使用
GIT\u DIFF\u OPTS=-c
请求上下文格式DIFF,那么我的(现代)
DIFF
程序会抱怨其命令行上的额外参数:

diff: extra operand `373e5907b789a1398a91f4ceb4ab14e8a0ed4282'
diff: Try `diff --help' for more information.
external diff died, stopping at [filename].
设置
GIT\u EXTERNAL\u DIFF=echo
显示GIT似乎在运行外部DIFF程序时使用了:

$GIT_EXTERNAL_DIFF <file2> <file1> <hash> <mode> <tmpfilename> <hash> <mode>
$GIT\u外部\u差异
这会混淆不需要额外参数的
diff
。有没有一种简单的方法告诉
git diff
创建一个旧式的“上下文”格式diff


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

配置一个difftool来执行您想要的操作:

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

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

$ git difftool -y -x "diff -c" | less
或者配置别名,使简单的“git cdiff”命令输出上下文样式差异:

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

你能解释一下如何获得两次提交的上下文差异吗。假设相关的提交散列是
b299g2
f242g3
?为什么我们插入“diff-c”作为一个选项?如果我们需要在两次提交之间以上下文格式获得差异,我们需要在哪里去掉旧提交和新提交,
git difftool-y-t ctxdiff oldCommitHash newCommitHash