使用IntelliJ作为git mergetool总是在它启动时立即退出

时间:2014-09-03 05:35:32

标签: macos git intellij-idea mergetool

我在我的mac上配置了IntelliJ作为我的diff和mergetool,但是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

我在没有git的情况下手动调用IntelliJ并且它也立即返回,所以我不认为这是由git的调用引起的,而是IntelliJ命令行调用只是发送一条消息来打开现有的窗口运行IntelliJ的实例..是否有一个选项可以强制IntelliJ不返回或生成一个新实例来使其工作?

2 个答案:

答案 0 :(得分:3)

没有办法做到这一点。有三种解决方法:

  1. 在使用difftool之前关闭现有应用程序。如果没有其他窗口打开,mergetool将正常工作。

  2. 将IntelliJ的第二个实例与different caches and config home一起使用但请注意第二个实例的许​​可。例如,如果您使用许可证服务器,则两个实例都将从服务器获取许可证。

  3. 在启动脚本中添加暂停(在Windows上)等内容。因此git将调用BAT文件(在Windows上),此BAT文件将调用IntelliJ,然后等待输入。在完成所需的所有操作后,您应该返回控制台并手动按任意键。

答案 1 :(得分:1)

现在可以使用。

运行操作“创建命令行启动器...”以创建启动脚本(对我来说是/ 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,则可能必须update the commandline launcher。)