Developer Tools · Cluster
Version Control Internals
Objects, refs, and merge algorithms.
- 01 Git's Object Model: Content-Addressed Blobs, Trees, and Commits How Git frames and hashes objects, why a rename leaves no trace in storage, and what the four object types cost when content changes.
- 02 The Git Index: A Sorted Path Table Between Worktree and Commit What the binary index file stores, how the stat cache avoids rehashing every file, and why merge conflicts appear as three entries for one path.
- 03 Refs, Symbolic HEAD, and the Reflog as an Append-Only Log How branch names are stored as text files and packed lists, how HEAD follows indirection, and what the reflog records that refs do not.
- 04 Packfiles and Delta Chains: How Git Stores Similar Objects Once The pack and index file formats, how delta instructions rebuild an object from a base, and what chain depth costs on read.
- 05 Commit-Graph Files and Generation Numbers Why ancestry queries are slow without an index, how topological levels and corrected commit dates bound a search, and where the graph goes stale.
- 06 How Diff Produces Hunks: Myers, Patience, and Hunk Sliding The shortest-edit-script problem behind line diffs, why the minimal answer often reads badly, and how hunk boundaries get moved after the fact.
- 07 Merge Bases and the Three-Way Merge Walk Why a merge needs a common ancestor, how the best common ancestor is chosen, and what the diff3 procedure does when both sides touch the same region.
- 08 Criss-Cross Merges, Virtual Ancestors, and Rename Conflicts What happens when a branch pair has several merge bases, how a synthetic ancestor is built, and why rename conflicts cannot be resolved automatically.
- 09 The Fetch Protocol: Wants, Haves, and Thin Packs How a client and server agree on the smallest object set to transfer, how pkt-line framing bounds each message, and why a received pack may not be complete.
- 10 Reachability, Grace Periods, and Cruft Packs How Git decides an object is garbage, why deletion waits two weeks, and how packs that carry their own modification times changed collection.