I am using SourceTree with Xcode's FileMerge. This has always worked fine. Today, when I right click->resolve using external diff tool, I get a window for a second showing that the launch is happening, and then nothing and the conflict disappears as though resolved. This is really bad as I am unable to merge changes.
Going into preferences, I tried to change the diff tool, but I can't click on any of the values - everything seems to be locked.
So I think what you need to do is:
This did not work for me. That option is checked, Diff/Merge tool is set explicitly to FileMerge (which is what it was using before it abruptly stopped working), and as recommended in another answer here, I have it set to Embedded Git rather than System Git, but none of that helped at all.
It used to work fine, and then suddenly stopped working a while back, without my having changed any configuration options whatsoever. I'm guessing it was when SourceTree automatically updated itself or something... But anyway, none of the answers in this post have helped for me.
Tested with Sourcetree v2.7.1 and DiffMerge v4.2.1 (with command line tools) on MacOS v10.13.3:
1. Open Sourcetree prefs and select `Diff` tab
2. Set `Visual Diff Tool` menu to `Custom`
3. Set `Diff command` field to: /usr/local/bin/diffmerge
4. Set `Arguments` field to: $LOCAL $REMOTE
5. Close prefs, select External Diff (or cmd-D) and observe DiffMerg launches.
More info here:
None of these worked for me either. Using latest SourceTree with Beyond compare. It doesn't happen on every file. I don't know what the common factor is on the files that it does happen with.
So it turns out the two files I was just trying to merge, the difference was that the file was no longer existent on the remote server. Rather than do something about the merge to show it was deleted, it just hung forever.
Even when I edited the .gitconfig diff tool path and fixed it by removing portion of the path, each time I'd restart DiffMerge, it would reappear.
So, here's the workaround.
1. Symlink DiffMerge to another location (so it's not auto-detected as DiffMerge)
ln -s /Application/DiffMerge.app /Applications/_DiffMerge.app
2. Then select a custom diff and merge tool arguments.
Diff command arguments:
--nosplash "$LOCAL" "$REMOTE"
Merge tool arguments:
--merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
After this, SourceTree will no longer mangle the path at startup because it doesn't think it's DiffMerge anymore.
If none of these things work, try running `opendiff` in the Terminal.
It there's an error like below you need to do one of two things:
As of writing SourceTree supports the following programs:
Supported Platforms macOS Windows We recently introduced support for additional hosting services such as GitHub Enterprise, GitLab (Cloud, Community Edition, Enterprise Edition), and...
Connect with like-minded Atlassian users at free events near you!Find an event
Connect with like-minded Atlassian users at free events near you!
Unfortunately there are no Community Events near you at the moment.Host an event
You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events