使用 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 总是一启动就退出的主要内容,如果未能解决你的问题,请参考以下文章