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

Arn*_*sen 10 git macos 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
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*erg 5

现在这有效了。

运行“创建命令行启动器...”操作来创建启动脚本(对我来说是 /usr/local/bin/idea。)

在 .gitconfig 中:

[mergetool "idea"]
  cmd = idea merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
  trustExitCode = true
Run Code Online (Sandbox Code Playgroud)

同样对于 difftool

[difftool "idea"]
  cmd = idea diff \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)

(由于存在错误,如果您不久前创建了命令行启动器并同时更新了 Intellij,则可能需要更新它。)


Yav*_*sta 3

没有办法做到。有以下三种解决方法:

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

  2. 使用具有不同缓存和配置主目录的 IntelliJ 的第二个实例,但要小心第二个实例的许​​可。例如,如果您使用许可证服务器,两个实例都将从服务器获取许可证。

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