Commits will have their files encoded as the differences from their versions in the parent commit, in order to save disk space.
In order to (partly) mitigate the slowdown this causes (having to read all previous commits in order to see a commit's files), the following steps will be taken:
-
Every X commits is a 'principal commit', encoded with all files
- This can be edited by repacking the repository (see below)
-
Every other commit is encoded as the patch required to transform the last
commit's files into the new commit.
-
Merge commits are always principal commits, regardless of if its their turn
(to avoid diff bugs)
- If X is set to -1 (all diff encoded, or only principal is the initial),
then each file in a merge commit will specify which parent is the diff base
for that file
Commits will have their files encoded as the differences from their versions in the parent commit, in order to save disk space.
In order to (partly) mitigate the slowdown this causes (having to read all previous commits in order to see a commit's files), the following steps will be taken:
Every X commits is a 'principal commit', encoded with all files
Every other commit is encoded as the patch required to transform the last
commit's files into the new commit.
Merge commits are always principal commits, regardless of if its their turn
(to avoid diff bugs)
then each file in a merge commit will specify which parent is the diff base
for that file