Использование 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.)
Нет способа сделать это. Есть три обходных пути:
Закройте существующее приложение перед использованием difftool. Если нет других открытых окон, mergetool будет работать правильно.
Используйте второй экземпляр IntelliJ с разными кэшами и настройкой дома. Но будьте осторожны с лицензированием второго экземпляра. Например, если вы используете сервер лицензий, оба экземпляра получат лицензию от сервера.
Добавьте что-то вроде паузы (в 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
Большое спасибо, Джошуа, отличная помощь!