All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: norm@dad.org
Cc: git@vger.kernel.org
Subject: Re: Question: Getting 'git diff' to generate /usr/bin/diff output
Date: Sun, 17 Jul 2016 09:46:51 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.20.1607170942580.28832@virtualbox> (raw)
In-Reply-To: <578a9d5b.xL1egXSTCv+mjhAT%perryh@pluto.rain.com>

Hi,

[Perry, my mailer could not find your MX record, so I am sorry I had to
drop you from the explicit To:...]

On Sat, 16 Jul 2016, Perry Hutchison wrote:

> norm@dad.org wrote:
> 
> > Would some kind soul be willing to tell me if there is a way to
> > do that, short of making a backup copy of the relevant file, and
> > then doing 'git checkout'. Maybe the '--ext-diff' argument to
> > 'git diff' will do that, but I can't figure out how to use it.
> > ...
> >     git version: 2.5.1.454.g1616360
> 
> 'git cat' would be simpler than making a backup and using 'git checkout',
> but for this use case there's a better way even than that.

$ git cat
git: 'cat' is not a git command. See 'git --help'.

;-)

You probably meant `git cat-file blob <SHA-1>`.

> Google is your friend when you can't figure something out from (or
> find the right part of) a program's own documentation.  A search for
> 
>     git "external diff program"
> 
> (including the quotes) found several references.
> 
> One possible complication:  It's likely that the command parameters
> which git passes to an external diff program are not exactly what
> /usr/bin/diff requires.  The solution to that sort of problem is to
> write a very short executable script that rearranges the parameters
> as needed, and specify that script (instead of /usr/bin/diff itself)
> as the external diff program.

To spell it out, you probably referred to the --ext-diff option:
https://github.com/git/git/blob/v2.9.2/Documentation/diff-options.txt#L528-L531

This option can be used with any diff-producing Git command, but it
requires a .gitattribute setting together with the corresponding
diff.external setting in the config.

A better method might be to use the `git difftool` command, e.g.

	git difftool -x diff

You can also inspect the diff of a commit, using the ^! suffix, e.g.

	git difftool -x diff origin/master~3^!

If you want to avoid the prompt and get the complete diff for all files in
one go, you will have to write a small script as indicated, e.g.

	printf '#!/bin/sh\n\n/usr/bin/diff -r "$@"\n' >my-diff.sh
	chmod a+x my-diff.sh
	git difftool -d -x $PWD/my-diff.sh HEAD^!

I did write all of this in the mail program, so I highly recommend reading
the man page of the difftool e.g. to understand the meaning of the -d
option, so that you can fix any problems with my examples yourself.

Ciao,
Johannes

  reply	other threads:[~2016-07-17  7:47 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-16 19:12 Question: Getting 'git diff' to generate /usr/bin/diff output norm
2016-07-16 20:47 ` Perry Hutchison
2016-07-17  7:46   ` Johannes Schindelin [this message]
2016-07-19 15:20     ` norm
2016-07-17 12:18 ` René Scharfe
2016-07-17 17:26   ` norm
2016-07-18  7:23     ` Johannes Schindelin
2016-07-18  9:19       ` [PATCH] pager: disable color when pager is "more" Eric Wong
2016-07-18 13:16         ` Jeff King
2016-07-18 17:19           ` Junio C Hamano
2016-07-18 18:58             ` Jeff King
2016-07-19  2:37             ` Eric Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.20.1607170942580.28832@virtualbox \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=norm@dad.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.