認識 Git 底層儲存機制

2021-10-23 23:12:16 字數 2012 閱讀 5026

眾所周知,git 是乙個非常強大的版本控制系統,要想支撐其運轉,底層的儲存結構是非常重要的。

當我們使用 git init 新建乙個 git 倉庫時,會自動新建乙個 .git 目錄。

進入 .git 目錄中,看看裡面有什麼

1. commit_editmsg 檔案

commit_editmsg 是每次提交時,寫的提交說明,只會儲存最後一次寫的。

2. config 檔案

config 是這個專案的 git 配置

我們可以使用 git config 命令來為 git 專案新增配置,如新增提交時的使用者名稱和郵箱。

其中 git config 有三個指定引數範圍的引數

– global 引數是為所有git專案設定引數,這個是環境變數級別的,這個比較常用

git config --global --add user.name git_username
– system 是為這台電腦的所有使用者設定,這個不常用

git config --global --add user.name git_username
–local 是單獨為當前的 git 專案設定

git config --local --add user.name git_username
當我們使用 git config 命令來設定引數時,就會儲存到 .git/config 檔案中

3. head 檔案

指示當前 head 指向的分支

下面顯示我當前是指向 master 分支的

5. 最重要的 objects

git 中是根據內容是否一致來判斷是否是同乙個檔案的,即使是有兩個檔名不同內容相同的檔案,git 也會只儲存乙份。

下面我們可以實際操作來感受一下。

先使用 git init 來初始化乙個專案,並且建立乙個commit,看看 objects 發生了什麼改變

初始專案後: info 和 pack 資料夾都沒有內容

當我們建立乙個檔案,並使用 git add . 提交到暫存區之後,可以發現多了兩個檔案

我們可以使用 git cat-file 命令來檢視物件的型別和實際內容

git cat-file -t 2d832d9044c698081e59c322d5a2a459da546469

注意後面這一串是資料夾名字+資料夾下的內容組成的

可以看到,我們使用 git add . 之後,新增了乙個 tree 和 blob 物件

其中 tree 為根節點,blob 為我們建立的那個檔案

然後我們建立乙個commit

可以看到現在有

乙個 commit ,為我們的提交

乙個 blob, 為我們建立的檔案

乙個 tree,為根節點的 tree

乙個 tree,包含了blob 的 tree

這三種檔案 commit blob tree 就是 git 主要的三種檔案了。

Git 底層原理

二.git 目錄結構 三.git add 與 git commit 簡單原理 四.建立與合併分支簡單原理 五.git rebase 簡單原理 六.開始從底層入手 git 七.git add 命令底層原理 八.git add 和 git commit 中間的操作 tree 物件的生成 九.git co...

git底層實現

通過使用本地git看一下git的add,commit是在幹什麼,分支又是什麼 add commit在幹什麼 git中有乙個物件資料庫,存放三種物件blob tree和commit find git objects type f 檢視所有物件blob是檔案內容,tree是檔案目錄結構,以下幾條命令實現...

git底層命令

cd d git 進入d git目錄下 git init 初始化 git config user.name hxd 建立使用者 git config user.email hxd 163.com 建立使用者郵件 cat git config 檢視使用者資訊 echo 11111 hxd.log 建立...