How to make git-diff create a “context” format diff?

一曲冷凌霜 提交于 2019-12-10 02:46:53

问题


I've got a Git repo from which I need to create a patch file in something other than the default git diff format. My use case is I've got a clunky old OSF/1 machine on which I need to apply the patch, and the /bin/patch program there doesn't understand unified diffs.

If I use GIT_EXTERNAL_DIFF=diff, hoping that I can then use GIT_DIFF_OPTS=-c to request a context format diff, then my (modern) diff program complains about extra arguments on its command line:

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

Setting GIT_EXTERNAL_DIFF=echo shows that Git seems to run the external diff program with:

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

This confuses diff which doesn't want the extra arguments. Is there an easy way to tell git diff to create an old-style "context" format diff?

(My current plan is to write a one-liner shell script that calls the real diff with just $1 $2, but I'm hoping there is a less awkward way.)


回答1:


Configure a difftool to do what you want:

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



回答2:


There is no need to configure a custom difftool, just use the -x option:

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

Or configure an alias to make a simple "git cdiff" command output a context-style diff:

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


来源:https://stackoverflow.com/questions/3129514/how-to-make-git-diff-create-a-context-format-diff

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!