1.什么是Git?
1.一個(gè)版本控制工具
2.Git中區(qū)域分為哪幾塊?有什么作用?
1.工作區(qū) 存儲(chǔ)當(dāng)前工作代碼
2.暫存區(qū)
3.版本區(qū) 所有版本存儲(chǔ)的地方
3.在一個(gè)文件中,如何實(shí)現(xiàn)對(duì)文件的管理?
1.所有文件成為git對(duì)象,則納入git的管理范圍。
2.將多個(gè)對(duì)象統(tǒng)一起來(lái),作為樹(shù)對(duì)象。
3.給樹(shù)對(duì)象加上包裝,注釋、作者,成為提交對(duì)象。
4.Git底層命令實(shí)現(xiàn)了什么功能?它們的高層表現(xiàn)是怎么樣的?
1.Git通過(guò)對(duì)每一個(gè)文件,作一個(gè)hash,保存于.git/objects/中,代表數(shù)據(jù)
具體實(shí)現(xiàn)方法:git hash-object filename [-w] -w代表write,寫(xiě)入數(shù)據(jù)庫(kù),沒(méi)有則僅返回這個(gè)文件的哈希值
注:每一個(gè)文件的哈希值不同(只要有任何一點(diǎn)點(diǎn)不同,都會(huì)不同)
結(jié)果:文件成為git對(duì)象,納入Git的管理范圍。

image
2.Git將hash值與filename打包,作為索引,稱作index,存入暫存區(qū)。(在.git下有index文件)
一方面通過(guò)filename對(duì)應(yīng)工作區(qū)文件,一方面通過(guò)hash值找到該文件。
具體實(shí)現(xiàn)方法:git update-index --add --cacheinfo 文件類型[100644] hash值 filename

image
3.當(dāng)暫存區(qū)具有一定量的index以后(隨便多少),將索引打包,生成樹(shù)對(duì)象,管理一系列文件
具體實(shí)現(xiàn)方法:git write-tree

image
4.給樹(shù)對(duì)象打包,加上信息,成為一個(gè)文件包,稱作提交對(duì)象
具體實(shí)現(xiàn)方法:git commit-tree 樹(shù)的哈希值 -m "注釋"

image
注1:由于提交的時(shí)間不同,相應(yīng)提交對(duì)象生成每一次并不相同。
注2:此處還不涉及關(guān)于暫存區(qū)到版本庫(kù)的高層管理,所以可以多次生成提交對(duì)象(但事實(shí)上如果相同,并沒(méi)有意義)
5.這些命令的高層表現(xiàn)
1+2.git add ./為全部文件 filename為單個(gè)文件
3+4.git commit -m "xxx"
5.Git的分支是什么?為什么憑借分支,能夠?qū)崿F(xiàn)版本控制?
分支是指向提交對(duì)象的指針。切換分支即將版本加載到工作區(qū)與暫存區(qū)
1.所有文件都以git文件形式存儲(chǔ),單個(gè)文件的所有版本都具有存儲(chǔ)。
2.暫存區(qū)將 文件版本hash 與 filename 對(duì)應(yīng)
3.commit對(duì)象是一個(gè)完整的版本。
4.通過(guò)更改分支,可以實(shí)現(xiàn)版本控制。
具體實(shí)現(xiàn):git branch 提交對(duì)象哈希值 name --->在某個(gè)提交對(duì)象(版本),創(chuàng)建指針。
注:請(qǐng)按照規(guī)范使用分支,否則將造成一些干擾(這種干擾理解的意義不大)
6.Git在這個(gè)基礎(chǔ)上還有哪些功能?(都是在前面的基礎(chǔ)上進(jìn)行延伸,不再贅述)
Tag:不會(huì)動(dòng)的指針
stash:臨時(shí)存儲(chǔ)當(dāng)前狀態(tài)
reset:選擇特定版本的特定文件(或者全部)進(jìn)行重置