How to use opendiff as default mergetool

2020-02-05 01:45发布

问题:

Hi I am trying to use opendiff as the git mergetool, but when I run mergetool I get this error message:

The merge tool opendiff is not available as 'opendiff'

What am I doing wrong? It was working fine before, but since I installed a new harddrive it's not working anymore :(

回答1:

You'll need to configure opendiff as your global merge.tool:

# locate xcode utilities
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

# set "opendiff" as the default mergetool globally
git config --global merge.tool opendiff

If you get Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo, opening XCode and accepting the license fixes the issue



回答2:

Make sure you have XCode installed. (If you are using git then you probably using brew, in that case you probably already have XCode installed.)

A one-off solution is to tell git what tool you want to use:

$ git mergetool -t opendiff

As far as setting up opendiff as your default tool, you need to set the "merge.tool" variable in your git config file.



回答3:

git supports --dir-diff (-d) to perform a directory diff, which looks good in FileMerge. However, there are a couple of minor problems using opendiff with --dir-diff. opendiff doesn't have a --merge target preset, and git will drop the temp files too soon to save changes. My work-around is to use a little bash script to invoke FileMerge. I called it gdiff.

#!/bin/bash
# find top level of git project
dir=$PWD
until [ -e "$dir/.git" ]; do
  if [ "$dir" == "/" ]; then
    echo "Not a git repository" >&2
    exit 1;
  fi
  dir=`dirname "$dir"`
done
# open fresh FileMerge and wait for termination
open -a FileMerge -n -W --args -left "$1" -right "$2" -merge "$dir"

https://gist.github.com/miner/e73fc98a83a8fe05d9ef000d46d68a9f

Call it like this:

git difftool -d -x gdiff