Git Diff From First Principles