Diff/merge tools

February 7, 2020 — March 9, 2020

computers are awful
information provenance
stringology
workflow

Tools to compare and harmonise folders/files.

1 Diff/merge GUIs

Handy as a complement to, e.g. git.

Meld is an open-source GUI merge tool. Free, cross-platform for Linux/Windows. A Mac fork exists.

Diffmerge is a classic cross-platform nagware merge. USD19 for a licence. Can be set up as a git merge tool.

kdiff3 is a long-well-regarded GUI, but it is somewhat hard to find in the nature of esoteric coder tools. The elderly original version has been superseded by what AFAICT is the new version integrated into KDE, which is rather hard to extract for separate use.

diffr is a browser-based diff app.

2 Recursive diffs

xxdiff

  • Comparing two files, three files, or two directories (shallow and recursive);
  • Horizontal diffs highlighting;
  • Files can be merged interactively and resulting output visualised and saved;
  • Has features to assist in performing merge reviews/policing;
  • Can unmerge CVS conflicts in automatically merged files and display them as two files, to help resolve conflicts;
  • Uses external diff program to compute differences: works with GNU diff, SGI diff and ClearCase’s cleardiff, and any other diff whose output is similar to those;
  • Fully customisable with a resource file;
  • Look-and-feel similar to Rudy Wortel’s/SGI xdiff, it is desktop agnostic (i.e. will work equally well with KDE or Gnome);
  • Features and output that ease integration with scripts.

xxdiff does not support comparing files encoded with Unicode. Also, it does not support inline editing of the diffed files. If you need these features, you could try emacs or Meld (although both of these lack some of the most interesting features of xxdiff).

diffoscope

diffoscope is a tool to get to the bottom of what makes files or directories different. It recursively unpacks archives of many kinds and transforms various binary formats into more human-readable forms to compare them.

pip install trydiffoscope
# or: sudo apt install trydiffoscope
# or: brew install diffoscope
trydiffoscope --webbrowser /path/to/file1 /path/to/file2