从SourceTree启动后,FileMerge立即退出

时间:2015-09-23 00:14:29

标签: xcode atlassian-sourcetree filemerge

我经常使用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作为其中一个此外,我的合并冲突不是由于删除了文件。)

5 个答案:

答案 0 :(得分:88)

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

  

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

要解决:

  1. 打开 Xcode>偏好>地点
  2. 点击命令行工具旁边的下拉框,然后选择您当前的Xcode版本。 (这对我来说是空的,因为我最近在新Mac上安装了Xcode。)
  3. Command Line Tools

    1. 再次在终端中运行opendiff,不再出现上述错误。
    2. 现在,当您点击启动外部合并工具时,FileMerge将从SourceTree正确打开。

答案 1 :(得分:8)

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

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

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

帮助我手动配置SourceTree 以通过opendiff命令使用FileMerge并使用以下参数:$LOCAL $REMOTE -ancestor $BASE -merge $MERGED

SourceTree manually configure to use opendiff

这样,SourceTree会按预期打开FileMerge。

答案 2 :(得分:7)

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

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

$ opendiff

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

运行open diff
$ sudo opendiff

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

答案 3 :(得分:5)

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

启用Xcode实用程序时告诉系统

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

全局将“ opendiff”设置为默认的合并工具:

git config --global merge.tool opendiff

答案 4 :(得分:4)

这也可以解决消息" xcode-select:error:tool' opendiff'需要Xcode,但有效的开发人员目录' / Library / Developer / CommandLineTools'是一个命令行工具实例"

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