Git對象類型(Object types)


一. 基本對象類型

Git中有四種基本對象類型,組成了Git更高級的數據結構:

  • blobs
    每個blob代表一個(版本的)文件,blob只包含文件的數據,而忽略文件的其他元數據,如名字、路徑、格式等。
  • trees
    每個tree代表了一個目錄的信息,包含了此目錄下的blobs,子目錄(對應於子trees),文件名、路徑等元數據。因此,對於有子目錄的目錄,git相當於存儲了嵌套的trees。
  • commits
    每個commit記錄了提交一個更新的所有元數據,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一個tree對象,記錄了當次提交時的目錄信息。一個commit可以有多個(至少一個)父commits。
  • tags
    tag用於給某個上述類型的對象指配一個便於開發者記憶的名字, 通常用於某次commit。

在.git/objects/中存儲了所有的對象,如用命令

find .git/objects -type f

列舉出所有對象如下(這里只列四個作為例子)

.git/objects/06/cd8f74b5114222c74d2042b7d7b6a57feb7a74
.git/objects/08/a69220e57387cd1b6207d147be44d54b356af4
.git/objects/0e/e6ff926999e39a1c61c470bc435224a74ba0a5
.git/objects/56/f0a1291c46803558687eeea807e07ae1a861ef

git用SHA1值的前兩個數字來分目錄存儲對象,因此上述四個對象分別為

06cd8f74b5114222c74d2042b7d7b6a57feb7a74
08a69220e57387cd1b6207d147be44d54b356af4
0ee6ff926999e39a1c61c470bc435224a74ba0a5
56f0a1291c46803558687eeea807e07ae1a861ef

用命令

git cat-file -t <SHA1>
git cat-file -p <SHA1>

可以分別查看對象的值和內容。一般地,使用SHA1值的前面幾位(而不是全部)就可以區分不同的對象,因此上述命令中可以用如git cat-file -t 06cd8f。

二. 如何查看對象的SHA1值

  1.  查看文件的SHA1值,用命令
    git hash-object file
  2. 查看SHA1值對應的對象的內容,也可用命令
    git show <SHA1>
  3. 查看commits,可用命令
    git log --pretty=oneline

    這會給出commit的歷史記錄。每行行首顯示了每次提交的SHA1值。然后用

    git show <SHA1>

    顯示commit的內容。

  4. 查看每次commit指向的tree,用命令(如對commit 5ca6fc)
    git rev-parse 5ca6fc^{tree}

    會顯示5ca6fc指向的tree的SHA1。如果想進一步查看tree的內容,用命力

    git show 5ca6fc^{tree}

    或者

    git cat-file -p 5ca6fc^{tree}

    后者輸出形如

    100644 blob 76018072e09c5d31c8c6e3113b8aa0fe625195ca    file1
    100644 blob 5716ca5987cbf97d6bb54920bea6adde242d87e6    file2
    100644 blob 10e2d16377371e6436ba3779e62381fdaf8fcfbf    file3
    040000 tree edf40c2308b255c4aebc34aa9cce134131778a14    src

    可以看出,這個tree包含三個blob和一個子tree。

  5. 查看tag,可用
    git tag

    列出所有的tag。對於某個tag “v1”,用命令

    git rev-parse v1

    查看tag的SHA1值。


免責聲明!

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



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