我经常使用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作为其中一个此外,我的合并冲突不是由于删除了文件。)
答案 0 :(得分:88)
为了诊断问题,我从终端运行了opendiff
。我收到以下错误:
xcode-select:错误:工具' opendiff'需要Xcode,但有效的开发人员目录' / Library / Developer / CommandLineTools'是一个命令行工具实例
要解决:
答案 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会按预期打开FileMerge。
答案 2 :(得分:7)
如果Xcode最近自行更新,您可能需要同意新的许可条款。如果您尚未同意许可条款,FileMerge(从SourceTree启动时)将立即退出。
要检查这一点,请打开一个shell并以普通用户身份运行:
$ opendiff
如果许可证是问题,它会告诉你。要同意新的许可条款,您需要使用sudo
:
$ sudo opendiff
在同意许可条款后,您现在可以使用Resolve Conflicts > Launch External Merge Tool
重新尝试从SourceTree启动FileMerge。 FileMerge应该启动并正常运行。
答案 3 :(得分:5)
这有助于: https://gist.github.com/kylefox/4512777
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
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