Использование DiffMerge на CodeAnywhere и Git - сообщение "Не найдено"
Я установил DiffMerge на свой Mac и настроил git для его использования в соответствии с их инструкциями, и он работает хорошо.
http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x/
Hit return to start merge resolution tool (diffmerge):
/usr/lib/git-core/git-mergetool: 1: eval: diffmerge: not found
merge of app/Http/Controllers/WizardController.php failed
Есть идеи? Нужен ли другой конфиг или что-то в этом роде?
Конфиги, которые я запускал:
git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'diffmerge "$LOCAL" "$REMOTE"'
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'
git config --global mergetool.diffmerge.trustExitCode true
Команда, которую я запускаю (когда нужно разрешить конфликт git):
git mergetool
Спасибо
Добавленные комментарии:
Когда у меня есть SSH-терминал, подключенный к удаленному серверу, такому как сервер CodeAnywhere, и я запускаю "git mergetool", он, очевидно, запускает /usr/lib/git-core/git-mergetool, который не находит diffmerge в удаленной системе, Я не вижу, где diffmerge вообще что-то устанавливает на пульте.
Это часть git config, которая относится к diffmerge:
diff.tool=diffmerge
difftool.diffmerge.cmd=diffmerge "$LOCAL" "$REMOTE"
merge.tool=diffmerge
mergetool.diffmerge.cmd=diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
mergetool.diffmerge.trustexitcode=true
похоже, что это фактическая команда, которую git использует для запуска diffmerge:
mergetool.diffmerge.cmd=diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
файл, выдающий ошибку, называется /usr/lib/git-core/git-mergetool, который я проследил до этой строки в этом файле, который, очевидно, выполняет указанную выше команду из командной строки и не находит diffmerge на удаленной машине, потому что это не установлен на удаленной машине, потому что он был установлен на моей локальной машине:
if ! run_merge_tool "$merge_tool" "$present"
then
echo "merge of $MERGED failed" 1>&2
mv -- "$BACKUP" "$MERGED"
if test "$merge_keep_temporaries" = "false"
then
cleanup_temp_files
fi
return 1
fi
Может показаться, что либо я что-то пропустил, устанавливая на удаленный компьютер, либо пропустил конфигурацию, в которой говорится, что нужно "временно скопировать" файлы в мой локальный каталог, затем запустить diffmerge в моем локальном хранилище, а затем вернуть удаленные файлы в удаленный. Я просто не вижу, что было пропущено в этом случае.
Спасибо
Спасибо @nwinkler за быстрый ответ. Если я понимаю ваше предложение, оно предназначено для запуска термина win на локальном Mac, а не для запуска термина win на удаленном компьютере (его запуск на Mac означает, что по умолчанию diffmerge.sh и т. Д. Будут доступны для термина Mac). win через диск работает как термин win), в то время как удаленный термин win не будет иметь прямого доступа к моему локальному диску. Пожалуйста, поправьте меня, если я ошибаюсь.
Я запустил "which diffmerge", как вы предложили, и он вообще не находит его (не установлен на пульте дистанционного управления).
Я рассмотрю ваши предложения и посмотрю, есть ли что-то для установки на пульте, а также попробую "установщик", который вы предлагаете.
Если я запускаю его из термина win, который запускается с моего локального Mac, он работает правильно.
Я согласен с тем, что он не обнаруживает различий на пульте. Я просто не вижу, что там должно быть установлено....
Спасибо, продолжаем исследования и опробуем ваши предложения.
1 ответ
Проблема в том, что diffmerge
исполняемый файл не на вашем $PATH
, Если вы введете следующее в своем терминале, он должен показать вам, diffmerge
может быть найден:
which diffmerge
Если diffmerge
был установлен на вашем пути, он должен показать что-то вроде этого:
$ which diffmerge
/usr/local/bin/diffmerge
Если diffmerge
не был установлен, выход which diffmerge
Команда будет пустой.
Чтобы исправить это, кажется, есть два пути:
- Согласно http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x, вам необходимо загрузить установщик Diffmerge, а не DMG, с http://www.sourcegear.com/diffmerge/downloads.php. Установщик, очевидно, установит
diffmerge.sh
скрипт, чтобы его можно было использовать из командной строки. Привязка сценария к месту на вашем пути самостоятельно. Для этого сначала нужно найти скрипт - по умолчанию он должен быть установлен в
/Applications/DiffMerge.app/Contents/Resources/diffmerge.sh
, Если он есть, вы можете связать его с чем-то вроде/usr/local/bin/diffmerge
как это:sudo ln -s /Applications/DiffMerge.app/Contents/Resources/diffmerge.sh /usr/local/bin/diffmerge
Это попросит пароль вашего пользователя (для
sudo
). После того, как вы сделали символическую ссылку на файл, вы должны убедиться, что/usr/local/bin
на вашемPATH
, Сначала попробуйте запуститьwhich diffmerge
еще раз, чтобы увидеть, работает ли это сейчас. Если это не работает, пожалуйста, не забудьте добавить/usr/local/bin
на вашPATH
переменная.Для этого вы можете отредактировать вашего пользователя
~/.bash_profile
файл (с любым текстовым редактором на ваш выбор). Добавьте строку, как показано ниже:export PATH=$PATH:/usr/local/bin
После сохранения файла откройте новое окно терминала и попробуйте
which diffmerge
снова.