Git物件概念詳解

admin發表於2018-08-08

如果學過物件導向的語言,那麼“物件”這個概念一定不會陌生,通常具有一些能完成指定功能的方法或者標識物件特徵的屬性。Git也具有物件,當然不能和麵向物件中的物件等同,它也有自身的特徵下面做一下介紹。

一.Git中物件型別:

(1).blob物件。

(2).tree物件。

(3).commit物件。

(4).tag物件。

二.blob物件:

此物件最為簡單,blob物件就是單純儲存資料,通常是文字內容。

假如有一個readme.txt檔案,那麼它就會形成一個blob物件。

當前向readme.txt文件寫入"螞蟻部落",並計算出它的sha-1值,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ echo "螞蟻部落" | git hash-object -w --stdin

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/08/000305x5juirjfrs3rrs0i.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

下面我們想要檢視這個blob物件的內容,可以使用如下命令:

[Shell] 純文字檢視 複製程式碼
$ git show 210a3e

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/08/000343yd6ohee8f4f8s8oi.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

也可以使用純純的linux命令,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ cat readme.txt

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/08/000451hw1pwwx2wwwxrr5a.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

特別說明:

(1).物件blob物件,Git只關注內容,在一個倉庫中,如果具有同樣的資料內容,那麼將會同享一個檔案。

(2).即便檔名稱不相同,Git也毫不在意,只關心資料內容,當然Git有自己的方式去區分檔名的不同。

三.Tree物件:

Tree物件如果翻譯成漢語那就是樹物件。

在工作中,大家對樹形導航或樹形性選單很熟悉,它們體現了一個層級結構。

Git中的Tree物件也是如此,圖示如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/08/000525vwcqpwqrllq0wqs5.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

Tree物件的形成是由目錄層級結構關係的,一個目錄中可以包含子目錄,也可以包含普通檔案。

一個目錄對應著一個Tree物件,總結如下:

(1).目錄對應著Tree物件。

(2).Tree物件可以指向其他Tree物件或者Blob物件。

(3).Tree物件也是用sha-1值唯一標識。

四.commit提交物件:

對於commit物件就比較熟悉了,進行一次commit提交就生成一個commit物件。

程式碼例項如下:

[Shell] 純文字檢視 複製程式碼
$ git commit -m "c1"

當我們檢視提交歷史的時候會看到更多的資訊,程式碼如下:

[Shell] 純文字檢視 複製程式碼
$ git log

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/08/000703qa3zrp3enpmdb4an.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到一個commit提交物件具有的更多資訊,圖示如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/08/000723six91xlfzi33iczi.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

總結如下:

(1).一個commit指向一個tree物件。

(2).提交是一步一步推進,除了第一個commit都有parent父提交,如果是合併的提交,它有多個父提交。

(3).具有其他一些提交資訊,比如作者,提交時間後者提交者等。

五.標籤物件:

標籤物件基本原理和commit,也具有一些相關提交資訊(當然不可能和commit提交一樣,只能說類似,比如標籤物件沒有父標籤等)。這裡不多介紹,具體參閱Git tag標籤用法詳解一章節。