Archived Content
Beyond Compare has been my favorite comparison tool for a while now. It is cross-platform and makes diffs and 3-way merges very easy to understand and visualize.
Configuring Beyond Compare 4
Git for Linux
To get it working on any linux flavor is pretty straight forward. Run these commands from terminal:
In order to get directory diffs working (e.g. git difftool --dir-diff
), I had to tweak the settings a little bit. By default, git uses symlinks to do the directory diff and BC4 will not follow those by default yielding something that looks like this:
There are a couple of ways to fix this (courtesy of StackOverflow). The approach I like is updating Beyond Compare to follow the symlinks.
In the Folder Compare, click the Rules toolbar button (referee icon). Go to the Handling tab. Check Follow symbolic links. To make this affect all new sessions, change the dropdown at the bottom of the dialog from Use for this view only to Also update session defaults before you click OK.
Git for Windows
On Windows, in addition to the above commands, you need to tell git the path to bcomp.exe
:
You don’t need to do anything special to get directory diffs working on Windows.
Git for Visual Studio
Visual Studio includes a builtin diff viewer that is pretty nice. However, I don’t find it as useful as I do Beyond Compare. Not to mention, it doesn’t support 3-way merge. Instead of using your global git config, it forces you to change the git config file in the repo. Specifically, you need to open git/config
in the repo and add the following:
[diff]
tool = bc4
[difftool "bc4"]
cmd = \"C:\\Program Files\\Beyond Compare 4\\BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
tool = bc4
[mergetool "bc4"]
cmd = \"C:\\Program Files\\Beyond Compare 4\\BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"
Now, among other things, you can right-click files in VS and choose Compare with Unmodified to open Beyond Compare.
Configuring Beyond Compare 3
Git for Linux
Pretty much the only difference from above is using bc3
instead of bc
:
Git for Windows
On Windows, it is a little more work. In addition to the above, you need to tell git the path to bcomp.exe
:
The reason I am using BCompare.exe
for the difftool instead of bcomp.exe
is described here. When using the new --dir-diff
option of the git difftool
command:
Beyond Compare 3 has a bug that is not fixed as of v3.3.12 where you need to employ this workaround. If you don’t do it, bcomp.exe
will exit too early, and no files will be available to diff while you are viewing the directory diff.
This is fixed in BC4, so you should probably just upgrade to that.
Using It
Once you have it setup, you can easily run
in your working copy to show unstaged changes. If you want to see a diff of the whole directory, you can run:
which opens BC’s directory comparison which can’t be beat IMO.
To resolve merge conflicts:
That will cycle through each merge conflict in the working copy and as long as you save the file from BC, the conflict will be marked resolved by git (hence the mergetool.bc trustExitCode
setting).