3 ms·
That's true until you get back to Git's packfiles, which use deltas. Git's form of compression is very interesting, but a key concept as you study the history
by rectang 5y ago
That's true until you get back to Git's packfiles, which use deltas.
Git's form of compression is very interesting, but a key concept as you study the history of version control is that snapshots and deltas encode the same information, so the choice of which to use is an implementation detail[1].
[1] I covered this in detail in a preso on Git data structure design for Papers We Love San Diego: https://www.youtube.com/watch?v=fHSZz_Mx-Uo&t=400s https://www.youtube.com/watch?v=fHSZz_Mx-Uo&t=400s
- karatinversion 5y agoThis is sensitive to the design of the delta format though, once you have merges. I had to write some code to migrate version history from Rational Team Concert to git. RTC has a uuid for each version of a file, and deltas are a set of zero or more predecessor versions, and a successor version. This allowed the same delta to be present in different “streams” (branches), if they only differed in files not relevant to the delta; but it becomes impossible to reconstruct a history of snapshots from the change sets.