接下來我們繼續(xù)浆熔,將文件commit
到版本庫(repository):
$ git commit -m 'commit A.txt'
[master (root-commit) f225037] commit A.txt
1 file changed, 1 insertion(+)
create mode 100644 A.txt
再來看看objects
里面的變化:
這一次又多了2個(gè)東西蘸拔,我們先查看完整的信息:
$ find .git/objects/
.git/objects/
.git/objects//f2
.git/objects//f2/250375e5113c7994b7f15cf51a2a48bf98cf7e
.git/objects//pack
.git/objects//info
.git/objects//f7
.git/objects//f7/0f10e4db19068f79bc43844b49f3eece45c4e8
.git/objects//12
.git/objects//12/ed70cbd523efd5f5209b9d6fb20bc9fd7fbb4c
再使用分析命令逐一分析:
$ git cat-file -t 12ed
tree
$ git cat-file tree 12ed
100644 A.txt????y?C?KI???E??
$ git cat-file -t f225
commit
$ git cat-file commit f225
tree 12ed70cbd523efd5f5209b9d6fb20bc9fd7fbb4c
author xxx <xxx@xxx.com> 151....551 +0800
committer xxx <xxx@xxx.com> 151....551 +0800
commit A.txt
得到的結(jié)果就是:
1.tree
記錄的是指向文件A.txt
的地址环葵,準(zhǔn)確的說是指向暫存區(qū)(stage)的index
;
2.commit
記錄的是備注信息张遭,即git commit -m 'commit A.txt'
中```單引號(hào)里的內(nèi)容。
最后我們看一下提交的記錄:
$ git reflog
f225037 (HEAD -> master) HEAD@{0}: commit (initial): commit A.txt
是否有發(fā)現(xiàn)f225037
似曾相識(shí)菊卷?其實(shí)就是指的commit
!
結(jié)論:
1.git commit
后objects
下新增一個(gè)tree
和一個(gè)commit
文件歉甚。
2.tree
:一個(gè)單獨(dú)的tree
對(duì)象包含一條或多條tree
記錄扑眉,每一條記錄含有一個(gè)指向 blob
或tree 對(duì)象
的 HS-1 指針赖钞,并附有該對(duì)象的權(quán)限模式 (mode)聘裁、類型和文件名信息(后面會(huì)詳細(xì)解讀);
3.commit
記錄的是tree
的HS-1值
;
3.HEAD
-> master
-> commit
-> tree
;