git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Using Filemerge.app as a git-diff viewer

From
TWToby White <tow21@cam.ac.uk>
Date
Nov 21, 2007, 13:10 UTC
Message-ID
<47442E57.8010004@cam.ac.uk>
In-Reply-To
<20071121112757.GA17231@sigill.intra.peff.net>
Jeff King wrote:
Show 12 quoted lines
> Have you looked at the documentation for GIT_EXTERNAL_DIFF (try git(7))?
> I think it is a cleaner way of doing what you want (although I think you
> will get each file diffed individually, which is perhaps not what you
> want).
> 
> Something like:
> 
> $ cat >merge.sh <<EOF
> #!/bin/sh
> opendiff "$1" "$2"
> EOF
> $ GIT_EXTERNAL_DIFF=./merge.sh git-diff ...

I hadn't seen that, no, but that's not quite right. (Wincent pointed out its flaws better than me. Basically, opendiff is not really diff-like enough.)

And in any case, that launches Filemerge repeatedly on every file separately, which makes reviewing a large diff time-consuming and not very helpful.

> write-tree? Yikes. If you want to diff against the working tree, then do
> that. If you want to diff against the index, then you probably want to
> git-checkout-index to a tmpdir, and diff against that.
Am I misunderstanding the documentation? From man git-write-tree
"Conceptually, git-write-tree sync()s the current index contents into a
  set of tree files. In order to have that match what is actually in your
  directory right now, you need to have done a git-update-index phase
  before you did the git-write-tree."

So git-write-tree precisely does give you the index not the working tree, by my reading.

Show 5 quoted lines
>> git-archive --format=tar $OLD | (cd $TMPDIR1; tar xf -)
> 
> Again, this could be simpler and faster by using git-checkout-index
> (preceded by git-read-tree into a temp index, if you are comparing
> against a tree).

Erm, ok, this is rapidly approaching the limit of my git knowledge, but while I can see git-read-tree will write a tree-ish into a temp index,

(so presumably git-read-tree --index-output=$TMPFILE <commit> ought to work. Except it doesn't, I get the error message fatal: unable to write new index file ),

I can't see how to make git-checkout-index read from a temp index.

And I'm assuming I don't want to go stomping all over the current index just in order to do a diff, which shouldn't change the state of my repository.

Is there a canonical way to checkout a given commit object into a fresh directory?

-- 
Dr. Toby O. H. White
Dept. Earth Sciences,
Downing Street,
Cambridge CB2 3EQ
United Kingdom

Tel: +44 1223 333464
Fax: +44 1223 333450
Web: http://uszla.me.uk
Previous: Jakub NarebskiNext: Wincent Colaiuta
Message 7 of 9 in “Using Filemerge.app as a git-diff viewer”
  1. Toby WhiteNov 21, 2007
  2. Jonathan del StrotherNov 21, 2007
  3. Jeff KingNov 21, 2007
  4. Wincent ColaiutaNov 21, 2007
  5. Jeff KingNov 21, 2007
  6. Jakub NarebskiNov 21, 2007
  7. Toby WhiteNov 21, 2007
  8. Wincent ColaiutaNov 21, 2007
  9. Jeff KingNov 21, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.