Использование IntelliJ в качестве git mergetool всегда завершается сразу после запуска

Я настроил IntelliJ в качестве моего diff и mergetool на моем Mac, но git запускает его, командная строка всегда возвращается немедленно, а не ожидает завершения diff, что означает, что внесенные изменения не отражаются на диске.

Моя конфигурация:

[mergetool "intellij"]
    cmd = /Applications/IntelliJ\\ IDEA\\ 13\\ CE.app/Contents/MacOS/idea merge \
          $(cd $(dirname \"$LOCAL\") && pwd)/$(basename \"$LOCAL\") \
          $(cd $(dirname \"$REMOTE\") && pwd)/$(basename \"$REMOTE\") \
          $(cd $(dirname \"$BASE\") && pwd)/$(basename \"$BASE\") 
          $(cd $(dirname \"$MERGED\") && pwd)/$(basename \"$MERGED\")
    trustExitCode = true

Я тестировал вызов IntelliJ вручную без git, и он также сразу же возвращается, поэтому я не думаю, что это вызвано вызовом git, а то, что вызов командной строки IntelliJ просто отправляет сообщение об открытии окна существующему запущенному экземпляру IntelliJ.. Есть ли возможность заставить IntelliJ не возвращать или порождать новый экземпляр, чтобы это работало?

3 ответа

Теперь это работает.

Запустите действие "Создать средство запуска из командной строки...", чтобы создать сценарий запуска (для меня / usr / local / bin / idea.)

В.gitconfig:

[mergetool "idea"]
  cmd = idea merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
  trustExitCode = true

аналогично для difftool

[difftool "idea"]
  cmd = idea diff \"$LOCAL\" \"$REMOTE\"

(Из-за ошибки вам может потребоваться обновить средство запуска командной строки, если вы создали его некоторое время назад и тем временем обновили Intellij.)

Нет способа сделать это. Есть три обходных пути:

  1. Закройте существующее приложение перед использованием difftool. Если нет других открытых окон, mergetool будет работать правильно.

  2. Используйте второй экземпляр IntelliJ с разными кэшами и настройкой дома. Но будьте осторожны с лицензированием второго экземпляра. Например, если вы используете сервер лицензий, оба экземпляра получат лицензию от сервера.

  3. Добавьте что-то вроде паузы (в Windows) в сценарий запуска. Так что git будет вызывать BAT-файл (в Windows), а этот BAT-файл будет вызывать IntelliJ, а затем ждать ввода. После того, как вы сделаете все, что вам нужно, вы должны вернуться в консоль и нажать любую клавишу вручную.

Как Джошуа Голдберг упомянул об идее, то же самое работает и с Rubymine.

Откройте RubyMine, затем нажмите shift + command + A, выберите «Создать программу запуска командной строки» и сохраните. После этого вы можете без проблем использовать команду «mine» в терминале, и вам следует обновить файл конфигурации git.

      [difftool "mine"]
  cmd = mine diff \"$LOCAL\" \"$REMOTE\"
[mergetool "mine"]
  cmd = mine merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
  trustExitCode = true

Большое спасибо, Джошуа, отличная помощь!

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