git review b - WBowam/wbowam.github.com GitHub Wiki
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 没有文件名,只有内容。
4. Tree 对象
一个 tree 对象就是一大坨指针,指向:
- 其他 small tree(子级 tree)
- blob 可以把 Tree 对象想象为 Linux 文件系统中的目录,记录了子目录的信息、文件信息。
5. Commit 对象
一个 commit 对象由以下几部分组成
- 作者
- 提交者
- 注释
- 指向一个 big tree 的指针
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),
- 这样我们就可以追踪项目每一项提交内容.