Git object model is content-addressed: every commit, tree, blob, and tag is stored under the hash of its contents

Packfile collapses many objects into one file and stores them as deltas against other objects in the same pack