所有的對象信息都存儲在.git/objects/目錄下,使用find命令查看一下:
bogon:test-project lakeslove$ find .git/objects/
.git/objects/ .git/objects//6a .git/objects//6a/85891810bcd4d5afa7e364d13d704dc603a73b //這個是head指向的第一個對象 .git/objects//pack .git/objects//7d .git/objects//7d/4e0fa616551318405e8309817bcfecb7224cff // 這個是blob對象 .git/objects//9a .git/objects//9a/327d5e3aa818b98ddaa7b5b369f5deb47dc9f6 //這個是tree對象,記錄的是該層目錄的信息,子目錄依然是tree類型,文本類型是blob .git/objects//info
bogon:test-project lakeslove$ cat .git/HEAD
ref: refs/heads/master
bogon:test-project lakeslove$ cat .git/refs/heads/master
6a85891810bcd4d5afa7e364d13d704dc603a73b
git log
commit 6a85891810bcd4d5afa7e364d13d704dc603a73b
Author: liuxin <liuxin@i-counting.cn> Date: Thu May 28 17:52:55 2020 +0800 add emphasis
HEAD所指向的原來是最后一次commit的信息,而且經測試可知parent指的是上一次commit的信息
bogon:test-project lakeslove$ git cat-file -t 6a85
commit
bogon:test-project lakeslove$ git cat-file commit 6a85 tree 9a327d5e3aa818b98ddaa7b5b369f5deb47dc9f6 author liuxin <liuxin@i-counting.cn> 1590659575 +0800 committer liuxin <liuxin@i-counting.cn> 1590659575 +0800 add emphasis
到目前為止,我們應該已經知道了對象數據庫是如何管理歷史記錄的了:
commit對象會指向一個tree對象,即在歷史記錄中當前結點的tree目錄的鏡像;也會指向父母(parent)commit,
這是為了和之前的commit建立關聯。
tree對象用於顯示一個目錄的狀態,tree對象中包含了blob對象和子目錄對象。
blob對象包含的是文件的數據。
每個分支的HEAD會存儲在.git/refs/heads中。同時,當前所在分支的頭部會存儲在.git/HEAD中。
重點理解tree類型
bogon:aha lakeslove$ git ls-tree a70c3
040000 tree 712e813eba9d50afe6f735ae39c4ad0079107765 .vscode 040000 tree 4ea9ded283ca4608e9d3d12d5d385cf2872f82af sort bogon:aha lakeslove$ git ls-tree 4ea9 100755 blob 861af04dd32279ff9417a0344bb465ca470ee418 indexSort 100644 blob ec31dd7b6e877e96c2aa8c037db114dff3db8780 indexSort.cpp 040000 tree 856d314cb2f4b695b3ff53c4ddb4a3fd21a8d4ee indexSort.dSYM
對應的目錄如下,跟tree是能一一對應起來的