git學習--object database

來源:互聯網
上載者:User

 

今天來看看git對象資料庫(object database)的相關內容:

1 首先要弄明白什麼是object database,我們先建一個git倉庫.

#mkdir test

#cd test

#git init

#vim file.txt


//在檔案中輸入Hi, zhm

 

#git add file.txt

#git commit -a -m "The first commit" 
           //此處-m參數項表示“後面的參數是本次提交的記錄

命令響應:

[master (root-commit) 83161ed] The first commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file.txt

然後再修改file.txt的內容為 Hi, zhm! I'm coming!

緊接著,我們再次提交修改至倉庫

#git commit -a -m "The second commit"

命令響應:

[master 818b0fd] The second commit
 1 files changed, 1 insertions(+), 1 deletions(-)

 

我們用git log查看日誌資訊

#git log

響應如下:

commit 818b0fd7612fed6237ed41ff226005a768ee7ada
Author: zhm <zhm1d1@126.com>
Date:   Thu Jun 24 10:22:26 2010 +0800

    The second commit

commit 83161eda0efd9f01c8b08a5a09d370bde5020615
Author: zhm <zhm1d1@126.com>
Date:   Thu Jun 24 10:21:24 2010 +0800

    The first commit

 

我們觀察到每個commit後面都緊跟著一大串字元,這是做什麼用的呢?其實這些是雜湊值,它能使每次commit的名稱是唯一的而且永久有效。

 

2 .現在要弄明白commit及其所指向的對象的一些資訊

執行下列命令:

#git cat-file -t 8316
    //8316即為commit後面的ID,此命令參數-t用於查看此ID的物件類型是誰

響應:

commit                         //即ID8316的對象是一次commit

#git  cat-file commit 8316  
               //commit後+ID,表示查看此commit對象資訊

tree fa557b315cd8d8bb66695e424619f3bb81d05398
author zhm <zhm1d1@126.com> 1277346084 +0800
committer zhm <zhm1d1@126.com> 1277346084 +0800

The first commit

 

從命令響應資訊中可以看出,一個commit對象的資訊含有一個tree及這個tree的ID,實際上這個treeID表示一個BLOB對象,此BLOB對象可能包含另外一個tree對象或者是源檔案,我們可以用命令ls-tree查看這個tree的更多資訊。

#git ls-tree fa55 
                           //此命令用於顯示tree對象的資訊,後面為tree的ID

100644 blob 1f0da587535282ac32bae3e5cfab854678d9f128    file.txt
很顯然,這個tree對象包括一個blob對象,後面為blob對象的ID:1f0da,並且此blob對象包含一個file.txt檔案,而blob對象包含於tree,即這個tree包含一個檔案file.txt.

#git cat-file -t 1f0d

blob

#git cat-file blob 1f0d

Hi,zhm

即,ID:1f0d的對象為BLOB,這個對象blob是一個檔案,檔案的內容為:Hi, zhm

 

3 以上所述的對象資訊全都儲存在.git/objects目錄下,可以使用find命令查看:

.git/objects/
.git/objects/c8
.git/objects/c8/d1b415b09ee6febb5f3231529bc8e9ca2d0243
.git/objects/pack
.git/objects/info
.git/objects/1f
.git/objects/1f/0da587535282ac32bae3e5cfab854678d9f128
.git/objects/83
.git/objects/83/161eda0efd9f01c8b08a5a09d370bde5020615
.git/objects/6b
.git/objects/6b/9a967d8b812082c448e354269bad7007fdfc97
.git/objects/81
.git/objects/81/8b0fd7612fed6237ed41ff226005a768ee7ada
.git/objects/fa
.git/objects/fa/557b315cd8d8bb66695e424619f3bb81d05398

4.我們查看HEAD的資訊

#cat .git/HEAD

ref: refs/heads/master   //為HEAD內容,即HEAD指向refs/heads/master,我們繼續按這個路徑追查下去

#cat .git/heads/master

818b0fd7612fed6237ed41ff226005a768ee7ada

這個master給出一個ID,繼續追查

#git cat-file -t 818b

commit   //即master主幹道指向一次commit,繼續追查

#git cat-file commit 818b

tree c8d1b415b09ee6febb5f3231529bc8e9ca2d0243
parent 83161eda0efd9f01c8b08a5a09d370bde5020615
author zhm <zhm1d1@126.com> 1277346146 +0800
committer zhm <zhm1d1@126.com> 1277346146 +0800

The second commit

 

由上可以得知,HEAD包含當前所處的分支資訊,並且指向最後一次提交commit,而且還包括一個parent對象,指向上次提交的commit資訊。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.