62

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

有什么问题,我该如何调试/修复它?

我注意到上一个问题' SourceTree filemerge 立即退出并创建 4 个文件。如何解决?' 没有解决这种特殊情况(例如,它说 FileMerge 在标题中退出,但在正文中它说 FileMerge 将 /dev/null 显示为面板之一。此外,我的合并冲突不是由于删除的文件造成的。 )

4

7 回答 7

177

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

xcode-select:错误:工具“opendiff”需要 Xcode,但活动开发者目录“/Library/Developer/CommandLineTools”是命令行工具实例

要解决:

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

命令行工具

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

现在,当您单击Launch External Merge Tool时,FileMerge 将从 SourceTree 正确打开。

于 2017-01-05T17:09:14.500 回答
21

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

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

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

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

SourceTree 手动配置使用 opendiff

这样,SourceTree 按预期打开 FileMerge。

于 2017-07-18T12:25:56.320 回答
14

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

当 Xcode 实用程序存在时告诉系统:

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

将“opendiff”设置为全局默认的mergetool:

git config --global merge.tool opendiff

于 2018-09-07T11:00:46.193 回答
8

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

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

$ opendiff

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

$ sudo opendiff

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

于 2015-09-23T00:14:29.173 回答
4

这也可以解决消息“xcode-select: error: tool 'opendiff' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance”

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
于 2017-09-07T10:31:30.647 回答
0

我遇到了这个问题并在这里
用答案解决了 所以这次,当我再次遇到它时,我认为同样的问题发生了......

在尝试了将近一个小时后,我意识到Diffmerge(或任何外部 diff 工具)没有打开,因为当前分支中没有要合并的文件

当您执行 Cherry Pick 时,可能会发生这种情况,因为提交可能会很跳跃。添加此答案以提醒将遇到相同问题的人。

于 2021-08-24T08:20:01.980 回答
0

TickAllow Sourcetree to modify your global...为我解决了问题 源树偏好

于 2022-03-05T08:48:00.310 回答