From: Wincent Colaiuta Date: Wed, 21 Nov 2007 12:59:37 GMT Subject: Re: Using Filemerge.app as a git-diff viewer Message-ID: <1A9343EE-BB45-4CF8-9F17-E6A73C5F0B83@wincent.com> In-Reply-To: <20071121112757.GA17231@sigill.intra.peff.net> El 21/11/2007, a las 12:27, Jeff King escribió: > 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 > opendiff "$1" "$2" > EOF > $ GIT_EXTERNAL_DIFF=./merge.sh git-diff ... A few problems with that: - FileMerge is broken, and crashes if you pass /dev/null as a param (which happens for new/deleted files) - you need to escape those $-signs - the params you're interested in are actually $2 and $5, not $1 and $2, according to git(7) - you need to handle the clean tree case (no params are passed) - and also the 1-param case, "for unmerged paths", whatever that means - will only work when run from the top of the tree (path parameters are passed in relative to that) So here's a less-broken version of your suggestion, but it's still broken; a relatively complex wrapper is required to do this right: $ cat >merge.sh <