- blobs: The saved contents of files. Since Gitlet saves many versions of files, a single file might correspond to multiple blobs: each being tracked in a different commit.
- trees: Directory structures mapping names to references to blobs and other trees (subdirectories).
- commits: Combinations of log messages, other metadata (commit date, author, etc.), a reference to a tree, and references to parent commits. The repository also maintains a mapping from branch heads to references to commits, so that certain important commits have symbolic names.
- metadata - log message & timestamp
- a mapping of file names to blob references
- a parent reference ( and a second parent reference
.gitlet
├── HEAD // points at HEAD e.g."ref: refs/heads/master"
├── logs
│ ├── HEAD
│ └── refs
├── index // staging area
│ ├── addition // for addition
│ └── removal // for removal
├── objects // stores blobs & commits
└── refs
└── heads // branches' headers