How to effectively diff a notebook?

How to effectively diff a notebook with another version of it? This is usually needed/encountered in revision control, but can be generally useful. What i currently do is disable notebook history, use less styling, and diff them as text files.

-
Some relevant answers here. –  b.gatessucks Nov 8 '12 at 17:12
Yeah, I'd say it's a duplicate. –  rm -rf Nov 8 '12 at 17:20
This might be useful for you: stackoverflow.com/a/8778007/695132 –  Szabolcs Nov 8 '12 at 18:07

The old AuthorTools package has a NotebookDiff function. You can open the package's documentation like this:

NotebookOpen@FileNameJoin[{\$InstallationDirectory, "AddOns", "Applications",
"AuthorTools", "Documentation", "English", "AuthorToolsGuide.nb"}];


This function is also included in the undocumented NotebookTools context (in version 8 at least). You can simply evaluate

NotebookToolsNotebookDiff[]


which will pop up a file chooser dialog, or you can pass the two notebooks to it as an argument (either file names or notebook handles, such as the ones returned by Notebooks[]). Please also see this answer of mine.

Access to this diff functionality is included in several of the Tortoise version control clients on Windows. TortoiseSVN and TortoiseHg are both set up by default to diff Mathematica notebooks this way (see here).

-

Copy as Input Text and paste into Quick Diff Online works very well. As previously described here.

-

It might be possible to use some of the techniques that the experts here provided when I asked this question before.

notebook1 =
StringJoin[
Import["/Users/cormullion/Desktop/hex-chart.nb", "Plaintext"]];
notebook2 =
StringJoin[
Import["/Users/cormullion/Desktop/hex-chart-a.nb", "Plaintext"]];
sa = SequenceAlignment[notebook1, notebook2];
Row@Flatten[
sa /. {a_, b_} :> {Style[a, Red], "(", Style[b, Green], ")"}]
`

giving something looking like this:

Red shows deletions, green shows additions. Perhaps the parentheses are not ideal for this application...! You can tell that I changed the base from 16 to 12 in the second version of the notebook. Although I used this solution, there's a better built-in but undocumented one found by ace spelunker @rm-rf which you could play with.

-