Re: Using Filemerge.app as a git-diff viewer
- From
Jeff King <peff@peff.net>
- Date
- Nov 21, 2007, 11:27 UTC
- 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 <<EOF #!/bin/sh opendiff "$1" "$2" EOF $ GIT_EXTERNAL_DIFF=./merge.sh git-diff ...
Show 18 quoted lines
> #!/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