Robonaissance

Robonaissance

AI Grew Up on Git, Part 6: The File That Refuses to Diff

Git’s entire value rests on one promise: it can show you exactly what changed. For a model’s weights, that promise quietly stops applying, for a reason deeper than file size.

Hugo's avatar
Hugo
Aug 20, 2026
∙ Paid

This is Part 6 of AI Grew Up on Git, a series on the Git infrastructure that raised AI and what AI is now doing to it.


Every part of this series so far has been a story about Git’s tamper-evident history getting stretched over something it was never built for. A social layer for strangers. A home for gigabyte-sized weights. A record of scientific claims. A $7.5 billion acquisition. The strain has a precise technical cause, and it deserves a full look on its own terms.

Git’s whole value, since Part 1, rests on one promise: any two points in its history can be compared, honestly, by anyone, and the comparison will tell you exactly what changed. For one specific kind of file, that promise quietly stops applying. Not because the file is inconvenient. Because the question “what changed” stops having a stable answer.

What Diff Does

Start with the tool itself, because the failure only makes sense once the mechanism is precise.

Git’s diff traces back to a 1986 paper by Eugene Myers in the journal Algorithmica. Myers took two old, separately known problems, finding the longest stretch two sequences have in common, and finding the shortest set of edits to turn one sequence into the other, and showed they were the same problem in disguise. Both could be modeled as finding the shortest path across a grid, an “edit graph,” and he gave a fast way to search that grid. That search is what runs, in some refined form, every time you type git diff.

The algorithm operates on sequences, and by convention, Git feeds it sequences of lines. Each line of a text file becomes one unit to compare, which is why a single changed line shows up in a diff as one deletion and one insertion rather than a “modification.” There is no concept of an edited line in this output, only lines that vanished and lines that appeared to replace them. This line-by-line habit is a choice about what to feed the algorithm, not a limit built into the algorithm itself, and Git can rerun the same logic at the level of words or characters when you ask it to.

On a binary file, none of this runs. Git checks for line structure, finds none, and rather than attempting a comparison it cannot make sense of, it prints two words and stops: “Binary files differ.” That message is not a failed diff. It is Git declining to try.

One precision matters here, because the rest of this argument depends on it: Git is not incapable of comparing bytes. A flag, git diff --binary, produces a genuine byte-level patch, encoded so it can be transmitted and reapplied. The capability exists. What matters is what happens once you have that comparison in hand for a specific kind of file, and discover it told you nothing true.

User's avatar

Continue reading this post for free, courtesy of Hugo.

Or purchase a paid subscription.
© 2026 Robonaissance · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture