SHA-1 tự viết
Tên object = hash nội dung. Khớp git hash-object.
Ý tưởng
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 ý đó.
$ mygit hash-object -w a.txt 80ae3accc67e7f14d11abf0398b3cb90d3c74c1c $ git hash-object a.txt 80ae3accc67e7f14d11abf0398b3cb90d3c74c1c # cùng SHA — git đọc được object mygit ghi
Tên object = hash nội dung. Khớp git hash-object.
LZ77 + Huffman cố định (RFC 1951). Đọc cả object Huffman động của git.
Nói chuyện với git-receive-pack — local, ssh, https.
Stack
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ử
./run.sh build rồi để mygit và git kiểm tra chéo:
cùng SHA, git đọc object, clone/push/worktree đều pass.