Git 存储过程探究_无赖皮肤-ChinaUnix博客
1一些基礎概念
1.1SHA1
SHA1是密碼學上的一種算法,git通過它來識別文件。在git中,通過對“對象”進行計算得來的SHA1,來得到對該文件項目的索引。其中SHA1值是一個40 個字符大小的“對象名”。所有對該文件的索引,都是通過該SHA值進行的。
實例:
其中的commit后面跟著的就是SHA值。
bolb用來存儲文件的內容,它是一塊二進制數據。Blob對象不像Tree或者 commit對象一樣,它沒有指向任何東西或者其它屬性。所以說,它本質上就是一個存放文件內容的倉庫。
一個tree對象通常有多個指向blob對象或者其它tree對象的指針,這個指針其實就是一個SHA值。tree對象一般用來表示內容之間的目錄和層次關系。
commit對象指向一個tree對象,并且它本身帶有一些相關的描述信息。
2.1首先查看commit對象的SHA值
使用git last命令可以查看最近一次的提交,下面commit所跟的即是該次 commit的索引,我們可以利用該SHA值查看commit中的內容。
該命令的語法格式:
測試:
從上一步中,我們找到了commit的SHA值,接下來可以使用該值查看commit的存儲結構。
該命令的語法格式:
測試:
~/ChenOS$ git show -s --pretty=raw 4931e7216ccommit 4931e7216c6128fc86ee517f644e0cabc5be1cdctree f5b7e53e20b4fc8aea3050863c8e69962850c4a6parent 31ea7b0e2727c11250c45c0e4783a7c9bad79b42author Li Shuo 1346460266 0800committer Li Shuo 1346460266 0800在emacs下測試一下
從命令的輸出結果上看,在commit中,存儲這該commit的索引,以及tree對象,父對象,作者和提交者的信息。在這里,我們需要的只是tree對象的索引。
由上一步,我們找到了commit指向的tree對象,我們就查看tree對象里面存著什么。
語法格式:
測試:
從輸出可以很清楚的看到,tree對象里面包含著blob對象以及其它tree對象的索引。仔細看,其中那個tree對象索引是一個目錄,跟上面兩個的屬性不一樣。而在這里,我們需要的是blob對象,我們希望知道blob里面放著什么。
語法格式:
測試:
我們再用cat看看這兩個文件的內容:
看清楚了吧,兩者實際上是一樣的,也就是說blob對象存儲著文件的內容。
到現在,我們可以說基本上搞明白了git存儲過程。Git通過SHA值找到commit對象,在commit對象中存儲著對tree對象的索引;接著通過該tree索引,找到tree對象, tree對象中存儲著對blob對象和其它tree對象的索引;最后,通過索引找到blob 對象,而blob對象中則存儲著實際的文件內容。整個過程完成。
轉載于:https://blog.51cto.com/5938138/989015
總結
以上是生活随笔為你收集整理的Git 存储过程探究_无赖皮肤-ChinaUnix博客的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再谈Jquery Ajax方法传递到ac
- 下一篇: 微软MCITP系列课程(八)文件服务器及