object db
内容寻址存储。对象名来自内容,文件路径由 SHA1 拆成二级目录。
早期 Git 存储模型的 Rust 学习实验
把 Git 先看成一个很小的内容寻址文件系统:对象库负责保存内容,index 记录工作区状态,tree 固化目录快照,commit graph 再把快照连接成历史。
这个实验不是为了替代 Git,而是用可运行代码理解一个经典系统的边界。
当前实现已经覆盖 object、index 和 tree 的最小模型,并记录了测试数量、命令边界和后续验证点。下一步是亲自完成从空目录开始的手动验收,再决定是否继续推进 commit graph。
内容寻址存储。对象名来自内容,文件路径由 SHA1 拆成二级目录。
工作区状态缓存。它不是提交,而是路径、stat、mode 和 blob id 组成的可变 staging filesystem。
不可变目录快照。把 basename 映射到 blob 或子 tree,用二进制 payload 表达目录结构。
下一层才是历史:tree 指针、parent 指针、作者信息和提交说明。
init-db、update-cache、write-tree、read-tree、cat-file。read-tree 恢复,再次 write-tree 得到相同 tree id。xxd .git/index 和 cat-file 看懂磁盘上到底写了什么。.git/index.lock,也不会误伤真实 Git 仓库。commit-tree 和手动 runbook。它把一个长期停留在书本里的系统问题压缩成可以运行、可以观察、可以失败的代码。对我来说,价值不在于重写 Git,而在于重新获得对底层系统的可验证理解。
这类实验也会反过来影响可靠数据队列、dumpdb 文件组织和内容寻址存储方面的工程判断。