Использование 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 Команда будет пустой.

Чтобы исправить это, кажется, есть два пути:

  1. Согласно http://twobitlabs.com/2011/08/install-diffmerge-git-mac-os-x, вам необходимо загрузить установщик Diffmerge, а не DMG, с http://www.sourcegear.com/diffmerge/downloads.php. Установщик, очевидно, установит diffmerge.sh скрипт, чтобы его можно было использовать из командной строки.
  2. Привязка сценария к месту на вашем пути самостоятельно. Для этого сначала нужно найти скрипт - по умолчанию он должен быть установлен в /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 снова.

Другие вопросы по тегам