GITVN

mygit — git thật thu nhỏ bằng C. Object khớp git từng byte. Không thư viện ngoài.

Ý tưởng

Không lớp bọc. Chỉ object thật.

Một object git là <type> <size>\0<content>, đặt tên bằng SHA-1, nén zlib vào .mygit/objects. Tree, commit, nhánh, push — dựng từ đúng một ý đó.

verify · run.sh
$ mygit hash-object -w a.txt
80ae3accc67e7f14d11abf0398b3cb90d3c74c1c
$ git hash-object a.txt
80ae3accc67e7f14d11abf0398b3cb90d3c74c1c
# cùng SHA — git đọc được object mygit ghi

SHA-1 tự viết

Tên object = hash nội dung. Khớp git hash-object.

zlib thật

LZ77 + Huffman cố định (RFC 1951). Đọc cả object Huffman động của git.

Protocol push

Nói chuyện với git-receive-pack — local, ssh, https.

Stack

Từ bit lên nhận PACK.

SHA-1 → DEFLATE → object store → index DIRC → worktree → receive-pack. Mỗi lớp sát máy, không SDK trung gian.

sha1.c · zlib.c

Hash + nén từ đầu, không -lz.

object.c · tree.c · index.c

Blob, tree, commit, staging DIRC v2.

push.c · worktree.c

PACK + linked worktrees đúng layout git.

Chạy thử

Một lệnh để chứng minh.

./run.sh build rồi để mygit và git kiểm tra chéo: cùng SHA, git đọc object, clone/push/worktree đều pass.