从SourceTree启动后,FileMerge立即退出

问题描述 投票:28回答:5

我经常使用Atlassian SourceTree(在Mac OS X上)启动FileMerge来解决git合并冲突。突然之间,它已停止工作:当我右键单击并选择Resolve Conflicts > Launch External Merge Tool时,FileMerge启动,创建其中间文件,然后立即退出。 SourceTree解释为合并过程完成。

问题是什么?如何调试/修复它?

我注意到前一个问题'SourceTree filemerge quits immediately and creates 4 files. How to fix it?'没有解决这个特殊情况(例如,它说FileMerge在标题中退出,但在正文中它表示FileMerge显示/ dev / null作为其中一个面板。此外,我的合并冲突不是因为删除了文件。)

xcode atlassian-sourcetree filemerge
5个回答
96
投票

为了诊断这个问题,我从终端运行了opendiff。我收到以下错误:

xcode-select:错误:工具'opendiff'需要Xcode,但是活动的开发人员目录'/ Library / Developer / CommandLineTools'是一个命令行工具实例

要解决:

  1. 打开Xcode>首选项>位置
  2. 单击“命令行工具”旁边的下拉框,然后选择当前的Xcode版本。 (这对我来说是空的,因为我最近在新Mac上安装了Xcode。)

Command Line Tools

  1. 再次在终端中运行opendiff,不再出现上述错误。

现在,当您单击“启动外部合并工具”时,FileMerge将从SourceTree正确打开。


10
投票

对我来说,SourceTree甚至没有启动FileMerge。单击“启动外部合并工具”时没有任何操作。

此外,在终端运行opendiff按预期工作:

$ opendiff
opendiff[64176:5561154] too few arguments
opendiff[64176:5561154] usage: opendiff file1 file2 [-ancestor ancestorFile] [-merge mergeFile]

帮助我的是通过opendiff命令手动配置SourceTree以使用FileMerge,其中包含以下参数:$LOCAL $REMOTE -ancestor $BASE -merge $MERGED

SourceTree manually configure to use opendiff

这样,SourceTree按预期打开FileMerge。


7
投票

如果Xcode最近自行更新,您可能需要同意新的许可条款。如果您尚未同意许可条款,FileMerge(从SourceTree启动时)将立即退出。

要检查这一点,请打开一个shell并以普通用户身份运行:

$ opendiff

如果许可证是问题,它会告诉你。要同意新的许可条款,您需要使用sudo运行open diff:

$ sudo opendiff

在同意许可条款后,您现在可以使用Resolve Conflicts > Launch External Merge Tool重新从SourceTree重新启动FileMerge。 FileMerge应该启动并正常运行。


5
投票

这有助于:https://gist.github.com/kylefox/4512777

Tell system when Xcode utilities live:

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

Set "opendiff" as the default mergetool globally:

git config --global merge.tool opendiff


4
投票

这也解决了消息“xcode-select:error:tool'opendiff'需要Xcode,但是活动的开发人员目录'/ Library / Developer / CommandLineTools'是命令行工具实例”:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
© www.soinside.com 2019 - 2024. All rights reserved.