git目錄結構


TOC

git目錄

新建一個git項目,查看.git目錄

.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags


9 directories, 15 files

objects

我的理解是,項目中你看到的每個東西都是一個object,實際上object有:commit、tree、blob、tag(加tag的時候才會有)

  • 添加一個文件
echo 111 > a.txt
# 此時看git目錄沒有任何變化
git add .
# 此時看git 目錄可以看到多了objects下多了一個目錄,運行以下命令:
git cat-file -p 58c9  #xxxx是遺傳16進制的值,由目錄名和里面的文件名組成
# 輸出 111
git cat-file -t 58c9  #可以看到當前objects的類型,此時是blob
# 通過上述的操作,可以知道,blob是一個只包含文件內容的object


# 接下來執行commit操作,此時會發現objects目錄下多了兩個文件,我們一個一個查看
git cat-file -p 9759 #

# 內容是tree f253233a1a0e59f33115daca3fa494eaa20758d8,還有一些其他信息
# 我們可以看到f253233a1a0e59f33115daca3fa494eaa20758d8也是objects中的一個對象,接着看看它,其實已經可以判斷它是一個tree類型
git cat-file -t 9759 #類型是commit

git cat-file -p f253 #內容 100644 blob 58c9bdf9d017fcd178dc8c073cbfcbb7ff240d6c    a.txt
git cat-file -t f253  #類型tree

通過以上的信息,實際上一次commit是構建了一棵樹。
以上:
9759->f253->58c9 || commit->tree->blob

如果修改a.txt的內容,可以看到會生成新的objects,並且有一個新的blob完全包含了新的a.txt的全部內容,這意味着,git是保存文件的完全的副本,而不是差異。同時會有新的commit object 和 新的tree object。實踐吧!
添加了b.txt的objects tree

├── objects
│   ├── 4c
│   │   └── aaa1a9ae0b274fba9e3675f9ef071616e5b209
│   ├── 58
│   │   └── c9bdf9d017fcd178dc8c073cbfcbb7ff240d6c
│   ├── 97
│   │   └── 590a17d455bf791b68561588bddae174d125d1
│   ├── c2
│   │   └── 00906efd24ec5e783bee7f23b5d7c941b0c12c
│   ├── d6
│   │   └── 43f2709193bf972c2d01a0119934e8789ec915
│   ├── f2
│   │   └── 53233a1a0e59f33115daca3fa494eaa20758d8
│   ├── info
│   └── pack
# d643是新的commit,可以看它的內容,會多了一個parent 97590a17d455bf791b68561588bddae174d125d1
# parent 把新的commit和過去的commit連接起來了!

可以試着reset一下,會發現其實所有的objects都還在的,只是改變了HEAD等指針;

git的所有內容都是實例和指向它的指針。

logs






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM