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 <<EOF #!/bin/sh opendiff "$1" "$2" EOF $ GIT_EXTERNAL_DIFF=./merge.sh git-diff ... > #!/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 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html