Git研究
以下命令在CentOS系统下执行
创建Git仓库
git init git-example
监控.git目录的变化情况:
watch -n .5 tree .git
写入文件内容,并把文件添加到Stage暂存区
echo 1 > t.txtgit add 1.txt
观察结果如下:objects下多出了一个d00491fd7e5bb6fa28c517a0bb32b8b506539d4d的对象
git cat-file -p d00491fd7e5bb6fa28c517a0bb32b8b506539d4d 查看对象的内容为1
git cat-file -t d00491fd7e5bb6fa28c517a0bb32b8b506539d4d 查看对象的类型为blob
知识点:Git的Objects对象的名称d00491fd7e5bb6fa28c517a0bb32b8b506539d4d计算方式是SHA1(<对象类型> <内容长度>\0<原始内容>)
SHA1(blob 2\01) 注意:在C语言中,\0用于标记字符串的结束。(不是\0字符本身,需使用printf输出\0空字符)
(printf "blob 2\0"; echo "1") | sha1sum
计算SHA1便捷指令:
(printf "blob %d\0" $(wc -c < 1.txt); cat 1.txt) | sha1sum
提交Commit文件,查看Objects变化(多了2个Object,一个tree,一个commit)
git commit -m "first commit"
Tree对象的内容:
Commit对象的内容:
最后查看 master 分支的 head 指向,可以看到指向了最新提交对应 commit object 的 key
cat .git/refs/heads/master