我经常使用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作为其中一个面板。此外,我的合并冲突不是因为删除了文件。)
对我来说,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按预期打开FileMerge。
如果Xcode最近自行更新,您可能需要同意新的许可条款。如果您尚未同意许可条款,FileMerge(从SourceTree启动时)将立即退出。
要检查这一点,请打开一个shell并以普通用户身份运行:
$ opendiff
如果许可证是问题,它会告诉你。要同意新的许可条款,您需要使用sudo
运行open diff:
$ sudo opendiff
在同意许可条款后,您现在可以使用Resolve Conflicts > Launch External Merge Tool
重新从SourceTree重新启动FileMerge。 FileMerge应该启动并正常运行。
这有助于:https://gist.github.com/kylefox/4512777
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
git config --global merge.tool opendiff
这也解决了消息“xcode-select:error:tool'opendiff'需要Xcode,但是活动的开发人员目录'/ Library / Developer / CommandLineTools'是命令行工具实例”:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer