git学习笔记2-概念

Git会把你的每次提交的文件的全部内容(snapshot)都会记录下来。
用来表示项目历史信息的文件,通过一个40个字符的(40-digit)“对象名”来索引
每一个“对象名”都是对“对象”内容做SHA1哈希计算得来的,这样就意味着两个不同内容的对象不可能有相同的“对象名”。

### 对象
每个对象(object) 包括三个部分:类型,大小和内容。
四种类型的对象:”blob”、”tree”、 “commit” 和”tag”。

查看一个blob对象里的内容

$ git show 6ff87c4664

查看tree对象

一个tree对象有一串(bunch)指向blob对象或是其它tree对象的指针,它一般用来表示内容之间的目录层次关系。
$ git ls-tree fb3a8bdd0ce

commit对象

git show -s –pretty=raw 2be7fcb476

tag对象

git cat-file tag v1.5.0

总结

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


Git目录

所有历史和元信息的目录 - 包括所有的对象(commits,trees,blobs,tags), 这些对象指向不同的分支.

工作目录

存储着你现在签出(checkout)来用来编辑的文件
只用来临时保存签出(checkout) 文件的地方, 你可以编辑工作目录的文件直到下次提交(commit)为止.

Git索引

在你的工作目录和项目仓库间的暂存区(staging area)
创建了一个提交(commit), 那么提交的是当前索引(index)里的内容, 而不是工作目录中的内容.
git status 命令是查看索引内容
哪些文件被暂存了(就是在你的Git索引中), 哪些文件被修改了但是没有暂存, 还有哪些文件没有被跟踪(untracked).

`