I made my own Git

Dev makes 'Tony's Version Control'—crowd split on SQLite, Sapling, and the missing title

TLDR: A dev built a mini Git called “Tony’s Version Control” using modern hashing and compression. Commenters debated swapping files for SQLite, cited Meta’s Sapling compression tricks, shared learning guides, and even teased a missing webpage title—showing how devs weigh learning, compatibility, and real-world tradeoffs.

A brave tinkerer rebuilt Git’s guts as Tony’s Version Control (tvc) and the internet did what it does best: cheered, argued, and roasted. Git is basically a file time machine; Tony swapped old choices for modern ones—SHA‑256 hashing (file fingerprints) and zstd compression (smaller storage), wrote it in Rust, and even added a .tvcignore file. Cue the comments clutching pearls and waving receipts.

The loudest take? “Just use a database.” One commenter pitched SQLite so you “don’t need to parse anything,” turning this into a classic dev meme: “Have you tried SQLite?” Meanwhile, the compression nerds pulled out charts: a Meta Sapling insider dropped docs on zstd dictionary tricks, sparking a trade‑offs showdown vs Git’s old pack files. Others kept it wholesome: educational deep dives like What’s inside .git? and the evergreen must‑read “Git from the Bottom Up” made the thread feel like a guided tour for curious mortals.

And because this is the internet, someone noticed the website’s missing HTML title and gently roasted it. The vibe: half “reinventing the wheel is the best way to learn,” half “please don’t ship a second Git.” The name Tony’s Version Control got laughs—“trust me, bro” energy—while the real drama was database vs filesystem and modern compression vs compatibility.

Key Points

  • The project reimplements core Git concepts in a custom tool named tvc.
  • tvc uses SHA-256 for hashing instead of Git’s SHA-1.
  • tvc uses Zstandard (zstd) for compression instead of Git’s zlib.
  • Implementation in Rust includes file listing with ignore rules, hashing, and zstd-based compression/decompression.
  • Commit objects store tree hash, parent (HEAD), author, and message, omitting Git’s size header and author/committer distinction.

Hottest takes

"How about using sqlite for this?" — kgeist
"Zstd dictionary compression is essentially how Meta's Mercurial fork (Sapling VCS) stores blobs" — sluongng
"gentle reminder to set your website's <title> to something descriptive" — heckelson
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.