Git 對象模型

Git 對象類型

Git 對象有如下四種:

  • blob
  • tree
  • commit
  • tag

blob 對象

blob 只是一個字節(jié)塊慕嚷,可以用來存儲文件、源代碼或者圖片等等转锈。

tree 對象

tree 就像文件系統(tǒng)目錄。一個 tree 可以指向或者包含:

  • blob 對象晾咪,就像文件系統(tǒng)目錄包含文件一樣
  • tree 對象场钉,就像文件系統(tǒng)目錄有子目錄一樣

commit 對象

每次執(zhí)行 git commit 成功后盟萨,就會創(chuàng)建一個新的 commit 對象圈纺。一個 commit 對象至少包含:

  • 提交 commit 的人的相關信息链沼,比如名字和郵箱默赂,以及提交 commit 的時間
  • 與 commit 相關的評論信息
  • tree 的哈希值,這個 tree 表示提交這個 commit 后的 git 倉庫

一個 commit 對象還有可能包含父 commit括勺,除了初始 commit 不包含父 commit 外缆八,其它 commit 都含有父 commit 的哈希值。如果一個 commit 有不止1個父 commit疾捍,那么肯定有 git merge 行為奈辰。

tag 對象

一個 tag 對象指向一個 commit 對象,可以用來引用某個特定的 tree.
一個 tag 對象包括:

  • tag 的名字
  • tag 所指向的 commit 對象
  • tag 評論信息
  • 打 tag 的人的名字和郵箱乱豆,以及打 tag 的時間

相關命令

## 打 tag
git tag -m 'tag message' tag-name [commit-hash-value]
## 查看 tag 信息
git cat-file -p tag-name
## 列出所有 tag
git tag -l
## checkout tag
git checkout tag-name

git add 做了什么

當執(zhí)行如下命令時奖恰,git 對象存儲發(fā)生了什么變化呢?

git add filename
  1. 計算文件內容的SHA1哈希值
  2. 在 .git/objects 目錄中創(chuàng)建子目錄咙鞍,子目錄名字即為上述哈希值的前兩個字符
  3. 在子目錄中創(chuàng)建一個 blob 對象房官,blob 對象包含了 filename 文件的內容,blob 的名字即為上述哈希值的后38個字符
  4. 把文件名 filename 及上述哈希值加到 .git/index 索引文件中

假如 filename 文件內容的SHA1哈希值是4b5fa63702dd96796042e92787f464e28f09f17d续滋,那么子目錄的名字為4b翰守,blob 的名字為5fa63702dd96796042e92787f464e28f09f17d。因此疲酌,blob 的完整路徑為 .git/objects/4b/5fa63702dd96796042e92787f464e28f09f17d

相關命令

## 查看文件的哈希值
git hash-object filename
## 根據(jù)哈希值查看文件內容
git show blob-hash-value

blob 對象的存儲結構

blob 對象是這樣構造的:

  1. 文件頭蜡峰,由對象類型(即 blob)、被 add 文件的大小朗恳、一個 null 字節(jié)構成
  2. 文件頭后接著是被 add 文件的內容
  3. 然后 zlib 壓縮整個文件得到 blob 對象

tree 對象的存儲結構

tree 對象的存儲結構類似于文件系統(tǒng)中目錄的存儲結構湿颅,tree 和目錄對應,而 blob 和文件對應粥诫。tree 對象中的每一條記錄由如下三個字段組成:

  • 對象類型油航,tree 或者 blob
  • 對象哈希值
  • 目錄或者文件的名字

相關命令

## 查看最近一次 commit 的信息
git cat-file -p HEAD
## 查看 tree 的內容
git ls-tree tree-hash-value

參考資料

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怀浆,隨后出現(xiàn)的幾起案子谊囚,更是在濱河造成了極大的恐慌怕享,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镰踏,死亡現(xiàn)場離奇詭異函筋,居然都是意外死亡,警方通過查閱死者的電腦和手機奠伪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門跌帐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绊率,你說我怎么就攤上這事谨敛。” “怎么了即舌?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵佣盒,是天一觀的道長。 經(jīng)常有香客問我顽聂,道長肥惭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任紊搪,我火速辦了婚禮蜜葱,結果婚禮上,老公的妹妹穿的比我還像新娘耀石。我一直安慰自己牵囤,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布滞伟。 她就那樣靜靜地躺著揭鳞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梆奈。 梳的紋絲不亂的頭發(fā)上野崇,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音亩钟,去河邊找鬼乓梨。 笑死,一個胖子當著我的面吹牛清酥,可吹牛的內容都是我干的扶镀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼焰轻,長吁一口氣:“原來是場噩夢啊……” “哼臭觉!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蝠筑,失蹤者是張志新(化名)和其女友劉穎忆肾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菱肖,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年旭从,在試婚紗的時候發(fā)現(xiàn)自己被綠了稳强。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡和悦,死狀恐怖退疫,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情鸽素,我是刑警寧澤褒繁,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站馍忽,受9級特大地震影響棒坏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜遭笋,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一坝冕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓦呼,春花似錦喂窟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至质和,卻和暖如春稳摄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侦另。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工秩命, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褒傅。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓弃锐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親殿托。 傳聞我的和親對象是個殘疾皇子霹菊,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容