使用 IntelliJ 作为 git mergetool 总是一启动就退出

Posted

技术标签:

【中文标题】使用 IntelliJ 作为 git mergetool 总是一启动就退出【英文标题】:Using IntelliJ as git mergetool always exits as soon as soon as it starts 【发布时间】:2014-10-27 12:24:19 【问题描述】:

我已经将 IntelliJ 配置为我的 mac 上的 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 不返回或生成新实例以使其正常工作?

【问题讨论】:

您确定.gitconfig 文件中允许使用这些反斜杠终止符吗? 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案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,您可能需要update the commandline launcher。)

【讨论】:

以上是关于使用 IntelliJ 作为 git mergetool 总是一启动就退出的主要内容,如果未能解决你的问题,请参考以下文章

使用git和intelliJ

Intellij IDEA 使用GitHub+Git

通过 IntelliJ 在 Linux 的 Windows 子系统中使用 Git

你如何让 Git 与 IntelliJ 一起工作?

intellij idea中如何配置和使用Git

intellij idea中如何配置和使用Git