From: Jeff King Date: Wed, 21 Nov 2007 11:27:57 GMT Subject: Re: Using Filemerge.app as a git-diff viewer Message-ID: <20071121112757.GA17231@sigill.intra.peff.net> In-Reply-To: <47440912.8010800@cam.ac.uk> On Wed, Nov 21, 2007 at 10:31:46AM +0000, Toby White wrote: > So I wrote a quick script (below) which does what I need. Of all > the available git-diff flags, it only understands "--cached", and > up to two commit objects, and no paths, but that's enough for me. > Within those constraints, it has the same semantics as git-diff. 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 < #!/bin/sh > # > # Filemerge.app must not already be open before running > # this script, or opendiff below will return immediately, > # and the TMPDIRs deleted before it gets the chance to read > # them. > > if test $# = 0; then > OLD=`git-write-tree` > elif test "$1" = --cached; then > OLD=HEAD > NEW=`git-write-tree` > shift > fi > if test $# -gt 0; then > OLD="$1"; shift > fi > test $# -gt 0 && test -z "$CACHED" && NEW="$1" 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. > 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). -Peff