11

我已经在我的 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 不返回或生成新实例以使其工作?

4

2 回答 2

3

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

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

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

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

于 2014-11-28T14:55:30.827 回答
2

这现在有效。

运行“创建命令行启动器...”操作以创建启动脚本(对我来说是 /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,则可能需要更新它。)

于 2020-07-07T19:44:59.353 回答