git学习--object database

 

今天来看看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信息。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值