如何使用opendiff作为默认的mergetool

时间:2012-12-05 08:36:20

标签: git mergetool opendiff

您好我正在尝试使用opendiff作为git mergetool,但是当我运行mergetool时,我收到此错误消息:

  

合并工具opendiff不能用作'opendiff'

我做错了什么?之前它工作得很好,但是因为我安装了一个新的硬盘驱动器,它不再工作了:(

3 个答案:

答案 0 :(得分:24)

您需要将opendiff配置为全局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

如果您获得Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo,则打开XCode并接受许可可解决问题

答案 1 :(得分:15)

确保安装了XCode。 (如果您使用的是git,那么您可能正在使用brew,在这种情况下,您可能已经安装了XCode。)

一次性解决方案是告诉git你想要使用什么工具:

$ git mergetool -t opendiff

至于将opendiff设置为默认工具,您需要在git配置文件中设置“merge.tool”变量。

答案 2 :(得分:1)

git支持--dir-diff(-d)来执行目录diff,它在FileMerge中看起来不错。但是,使用opendiff和--dir-diff存在一些小问题。 opendiff没有--merge目标预设,git会过早删除临时文件以保存更改。我的解决方法是使用一个小的bash脚本来调用FileMerge。我称之为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

这样称呼:

git difftool -d -x gdiff