I have been reading "Version Control with Git" by J. Loeliger and M. McCullough and I found following explanations for git's internal structure and packed files, respectively:
"Git's internal database efficiently stores every version of every file - not their difference - as files go from one revision to the next. Because Git uses the hash of a file's complete content as the name for that file, it must operate on each complete copy of the file. It cannot base its work or its object stores entries on only part of the file's content nor on the difference between two revision of that file."
"To create a packed file, Git first locates files whose content is very similar and stores the complete content for one of them. It then computes the difference, or deltas, between similar filed and stores just the difference."
Now they seem contradictory to me, first paragraph being wrong, because Git does store delta of blobs (delta being blobs themselves). So why would the authors decide to explain it such way? Or could someone bridge the gap between those two paragraphs? It seems to me that Git does fine with packed files without having the full snapshot. I have an example here from git-scm.com.