眾所周知,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 建立...