Skip to content
tulpar008 edited this page Mar 29, 2015 · 1 revision

Date:2015-03-29 Title: git 复习巩固(2) Tags:git Category:It

1. 对象名

6ff87c4664981e4397625791c8ea3bbb5f2279a3

  • 所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)“对象名”来索引的.
  • 每一个“对象名”都是对“对象”内容做SHA1哈希计算得来的,(SHA1是一种密码学的哈希算法)。这样就意味着两个不同内容的对象不可能有相同的“对象名”。

2. 对象

  • 有四种类型的对象:"blob"、"tree"、 "commit" 和"tag"

3. Blob 对象

新文件纳入到 Git 后会被五马分尸,它的内容被扔到在一个 blob 对象中,它的对象名是基于内容运算生成的一个 40个字符的 SHA1值。

blob 没有文件名,只有内容。

blob

4. Tree 对象

一个 tree 对象就是一大坨指针,指向:

  • 其他 small tree(子级 tree)
  • blob 可以把 Tree 对象想象为 Linux 文件系统中的目录,记录了子目录的信息、文件信息。

tree

5. Commit 对象

一个 commit 对象由以下几部分组成

  • 作者
  • 提交者
  • 注释
  • 指向一个 big tree 的指针

commit

6. 我们已经了解了3种主要对象类型(blob, tree 和 commit), 让我们大概了解一下它们怎么组合到一起的

如果我们一个小项目, 有如下的目录结构:

$>tree
.
|-- README
`-- lib
    |-- inc
    |   `-- tricks.rb
    `-- mylib.rb

2 directories, 3 files

如果我们把它提交(commit)到一个Git仓库中, 在Git中它们也许看起来就如下图:

示例

可以看到:
  • 每个目录都创建了 tree对象 (包括根目录),
  • 每个文件都创建了一个对应的 blob对象 .
  • 最后有一个 commit对象 来指向根tree对象(root of trees),
  • 这样我们就可以追踪项目每一项提交内容.

看到

Clone this wiki locally