关于git:如何使用opendiff作为默认的mergetool

How to use opendiff as default mergetool

嗨,我试图使用opendiff作为git合并工具,但当我运行mergetool时,会收到以下错误消息:

The merge tool opendiff is not available as 'opendiff'

我做错什么了?它以前工作得很好,但自从我安装了一个新硬盘后,它就不再工作了:(


您需要将opendiff配置为全局合并。工具:

1
2
3
4
5
# 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并接受许可证就可以解决这个问题。


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

一次性解决方案是告诉Git您要使用什么工具:

1
$ git mergetool -t opendiff

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


Git支持--dir diff(-d)来执行目录diff,这在filemerge中看起来很好。但是,在使用opendiff和--dir-diff时有一些小问题。opendiff没有--merge目标预设,Git将很快删除临时文件以保存更改。我的工作是使用一个小bash脚本来调用filemerge。我叫它gdiff

1
2
3
4
5
6
7
8
9
10
11
12
#!/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

这样称呼它:

埃多克斯1〔2〕