Comment by DannyBee

13 years ago

Remember that diff is an algorithm to generate the smallest set of operations to produce version B from version A, not an accurate reconstruction of what happened. Diff algorithms are also often tuned not try as hard to find the smallest set of changes for larger documents, due to speed concerns.

Git's built-in diff algorithm is particularly bad for text. Since it's aimed at line-oriented code, it does line-based diffs, which is horrible for ASCII text that is reflowed, because every line in a paragraph will show up as changed for a small change.

Example: https://github.com/divegeek/uscode/commit/1fb2d83137dad1c6ca...

What's happened is that "Section 2" was moved later in the sentence, abbreviated as "Sec. 2", "of" was deleted, and "act" was capitalized:

    Section 2 of act July 30, 1947, ch. 392, 61 Stat. 674, provided...

    Act July 30, 1947, ch. 392, Sec. 2, 61 Stat. 674, provided...

The rest of the paragraph is unchanged, but git shows a 6-line diff with the entire paragraph replaced. GitHub attempts to do some word-based highlighting (see the timestamp lines), but it falls down on most of these paragraphs. Wikipedia's diffing tends to work better for this kind of thing; I'm not sure what they use. The upshot is that the number of lines changed may be a 5-10x overestimate.

  • If there are sporadic line differences, for that git diff supports different algorithms than the default. patience or histogram may work better.

    as far as words in lines, you do have a point.

I did some work & research about diffs when I tried to visualise progression of slovak law. My best attempt was a diff method that would understand the inner structure of the law. I ended up with simple draft but I am sure somebody more competent could look into that.

  • At least in the US, a lot of the laws that get passed are in the form of diffs.

    That is, the law that they enact says "This law is to do blah blah blah.

    Subsection 1373(a) of the US code is replaced with the following text 'blah blah blah'"

    The wording used is pretty standard. So you can actually parse it in most cases to see what the actual changes are.

  • > I ended up with simple draft but I am sure somebody more competent could look into that.

    If nothing prevents you, you ought to throw this up for others to see. Worst comes to worst, no one finds it useful.