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值。

posted @ 2012-12-11 06:30  liyropt  阅读(4677)  评论(0编辑  收藏  举报