天天看點

3:Git對象

了解Git對象

Git 的核心部分是一個簡單的鍵值對資料庫。你可以向該資料庫插入任意類型 的内容,它會傳回一個鍵值,這個值就是根據你的内容得到的hash值,通過該鍵值可以在任意時刻再次檢索該内容.

例如:

1​​

​echo "jane1" | git hash-object -w --stdin​

​​ 這裡的echo “jane1” 就是向控制台輸出jane1,

| 的意思是執行另外的一個代碼

git 是代表這個是git代碼

hash-object 就是存儲資料對象

-w 就是就是向Git倉庫儲存這個内容,檔案名是用hash的前兩個字母來建立一個檔案夾,後面的hash值的字母用來做檔案名,檔案的内容就是要儲存的内容,若沒有寫這個就隻是傳回hash值,不會向倉庫裡面寫内容的

–stdin 訓示該指令從标準輸入讀取内容; 若不指定此選項,則須在指令尾部給出待存儲檔案的路徑:​

​git hash-object -w 檔案路徑​

2.​

​find ./.git/objects -type f​

​ 這個指令就是看檔案,就是到.git/objects 這個目錄下面看看還有什麼檔案,有的話就在控制台裡面顯示出來

3.​

​git cat-file -p 寫上對應的hash值​

-p 選項可訓示該指令自動判斷内容的類型,并為我們顯示格式友好的内容

前面我們說過​

​cat 檔案的url​

​ 這樣子也可以看檔案的内容,但是這裡的内容是被壓縮過的,是以這樣看就會出現亂碼

将這裡的-p改成-t就是看這個檔案是什麼對象,這裡看的git存儲的鍵值對是bold類型

3:Git對象

如果我們對jane.txt檔案進行修改,git倉庫是完全不知道的,需要通過git hash-object -w 修改後的檔案位址 這個指令将新修改的檔案加進git倉庫去,然後在倉庫會新生成一個git鍵值對對象,這個新的對象完全儲存了前面一個版本的内容,是以git儲存的是完整的快照,而不是增量,例如下面的操作:

3:Git對象

總結:Git對象就是用來存儲内容的,它并不能代表一個項目的版本,Git的每一個版本隻是檔案的每一個版本,而且Git對象就遇到幾個問題: