Как использовать opendiff как mergetool по умолчанию

Привет, я пытаюсь использовать opendiff в качестве git mergetool, но когда я запускаю mergetool, я получаю это сообщение об ошибке:

Инструмент слияния opendiff недоступен как opendiff

Что я делаю неправильно? Раньше он работал нормально, но, поскольку я установил новый жесткий диск, он больше не работает :(


person CorpusCallosum    schedule 05.12.2012    source источник
comment
Это на OSX Snow Leopard.   -  person CorpusCallosum    schedule 16.12.2012
comment
очистить opendiff и заново установить? Я надеюсь ты уже пробовал   -  person Ram    schedule 26.02.2013


Ответы (3)


Вам нужно будет настроить 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 и принятие лицензии решит проблему.

person Kevin Leary    schedule 02.09.2014
comment
Я предполагаю, когда git еще не найден, но трудно понять, как вы можете оказаться в такой ситуации. - person Tommy; 21.12.2015
comment
Раньше я мог запускать opendiff, но два дня назад я установил rvm и установил последнюю версию Ruby 2.6.3 ... а затем opendiff перестал работать, сообщая о xcode-select: error: для инструмента 'opendiff' требуется Xcode, но активный каталог разработчика '/ Library / Developer / CommandLineTools '- это экземпляр инструментов командной строки. Ваша первая строка xcode-select устранила проблему ... но это было настолько загадочным, что происходило - person nonopolarity; 30.08.2019

Убедитесь, что у вас установлен XCode. (Если вы используете git, вы, вероятно, используете brew, в этом случае у вас, вероятно, уже установлен XCode.)

Одноразовое решение - указать git, какой инструмент вы хотите использовать:

$ git mergetool -t opendiff

Что касается настройки opendiff в качестве инструмента по умолчанию, вам необходимо установить переменную "merge.tool" в конфигурационном файле git.

person cogell    schedule 08.03.2013

git поддерживает --dir-diff (-d) для выполнения сравнения каталогов, что хорошо выглядит в FileMerge. Однако есть несколько мелких проблем с использованием opendiff с --dir-diff. opendiff не имеет предустановки --merge target, и 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

person miner49r    schedule 25.04.2016
comment
Вау, это действительно работает так, как должно! (opendiff никогда не работал должным образом, потому что он возвращается до завершения, а соединение с cat блокирует его команду только до тех пор, пока вы не нажмете Сохранить, а не до тех пор, пока программа не выйдет) - person StackedCrooked; 08.05.2020