文章目錄
- git 最小配置作用域
- git 建立本地倉庫
- git log 檢視版本演進
- .git 目錄
- refs目錄
- objects
- git 三種對象類型詳解 (commit ,tree,blob)
因為工作需求,接下來将從git的使用到其内部工作原理,來避免代碼送出或者review或者版本管理上的一些尴尬,同時也來學習一下這個優秀的分布式版本管理工具的實作,了解事務在分布式裡面的原子性思想。
git 最小配置作用域
git 建立本地倉庫
git log 檢視版本演進
.git 目錄
單獨介紹一下如下兩個重要的目錄:
refs目錄
refs目錄下有兩個目錄:heads和tags
- heads 儲存的是獨立的分支空間,且之間互不影響。
- tags表示裡程碑,項目開發到一定程度之後可以打上對應的tags作為一個階段的标記
heads目錄下的 分支内容儲存的是一個個代表唯一分支的名稱的四十位的hash值
通過
git branch -av
看到的分支資訊 看到的分支名稱後面的hash值比較短,這裡是隻要這個hash值能夠唯一代表目前的分支即可顯示,是以短一點也是能夠唯一性表示目前分支的。
tags的目錄下也儲存着之前打過的tags,為每一個tags生成一個唯一的對象,且用40位的hash值進行辨別
通過如下兩個指令可以檢視對應hash值代表的對象類型和操作内容
-
檢視對象類型git cat-file -t hash_value
-
檢視對象内容git cat-file -p hash_value
objects
目錄内容如下:
pack 是在多個松散目錄較多的情況下對其進行壓縮,将壓縮後的資料儲存到目前目錄
其他松散目錄來看一下
cd 14 && ls -al
git cat-file -t 142a4f1706858e07b1a29c591d48ebc3e562bc45
-t來檢視類型 以及-p 檢視具體的内容
這裡需要注意hash數值的前兩位一定是目錄名稱,後面是實際的hash數值
類型是tree,且發現内容是一個blob類型的對象,其儲存的是我們目前git目錄下的唯一一個檔案test_file,繼續檢視其類型及内容
git 三種對象類型詳解 (commit ,tree,blob)
目前通過對git目錄的通路,可以看到git擁有三種主要的核心對象:commit(heads目錄),tree(objects目錄),blob(實際的資料,儲存在tree對象的指向中)
- commit類型就是我們使用
送出之後建立的資料對象,使用git commit
git cat-file -p b360e56
後面的字元串是本次commit下的内容資訊,它是按照樹形存儲的。主要是裡面的tree類型的檔案夾。
内容如下:
root@root heads % git cat-file -p b360e56b39a5d605918816ea4dc07d61e93b12f8
tree 142a4f1706858e07b1a29c591d48ebc3e562bc45
parent 30a71408576f421909d05cdd424703b8866dd943
author BaronStack <[email protected]> 1593260841 +0800
committer BaronStack <[email protected]> 1593260841 +0800
- tree 類型就是git目錄的管理結構,也可以當作檔案夾來看。通過tree的hash值我們能夠通路到存儲與其檔案夾内部的子目錄以及對應的子檔案。
- blob類型 是真正存放資料的内容,隻要資料的内容一樣,git這裡隻會建立一個blob對象。是以,這裡也保證了blob的版本控制和不同版本的合并功能是正常的。