我将会使用rust写一个mini-git, 本文旨在梳理git的基本原理.
如图, tree对象的子孙可以是blob, 也可以是tree(用于多级目录生成)
hash-object命令可以把一个文件或者标准输入哈希,存在.git/objects中
哈希值前两位用作目录索引, 如d670460b4b4aece5915caf5c68d12f560a9fe3e4存储路径为
bash.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
cat-file 用于显示文件
用于把文件加入暂存区,同时需要指明文件权限,SHA1,文件名
将暂存区内容写入tree对象中,无需其它参数
将一个tree对象进行提交
编辑引用文件
bashgit update-ref refs/heads/master 1a410efbd13591db07496601ebc7a059dd55cfe9
编辑head文件
blob {context.len}\0
HEAD文件是一个引用,指向refs中的文件
bash$ cat .git/HEAD
ref: refs/heads/master
可以使用symbolic-ref