Git学习笔记
Git与SVN的区别:SVN是集中式的版本控制系统,Git是分布式的版本控制系统。
- 集中式版本控制系统,版本库是集中存放在中央服务器的,每个人都需要pull最新的文件到自己的电脑或者push更新到中央服务器。
- 分布式版本控制系统,没有中央服务器,版本库是存放在每个人的电脑,同事之间只需要把各自的修改push给对方即可。
图1 集中式控制系统

图2 分布式控制系统
SHA
Git里常见‘40个字符’的字符串,是用来索引所有项目历史信息的文件。
每一个对象名都是对对象内容做SHA1运算,内容不一样则SHA1值不一样;只有他们的内容完全相同,SHA1值才会相同。
blob对象和tree对象和其他对象一样,都是用其内容的SHA1值来命名的,因此Git可以仅仅根据tree对象的名字是否相同来判断其对象内容是否一样。
对象
对象分为类型、大小、内容三部分,有四种类型的对象:blob、tree、commit、tag。
- blob对象用来存储文件的内容,一个blob对象就是一块二进制数据。
- tree对象用来表示内容之间的目录层次关系,一个tree对象有一串指向blob或其他tree对象的指针。
- commit对象指向一个tree对象,且带有相关的描述信息;由一个tree、parent、author、committer四部分组成。
- tag对象对某一个时间点的版本打上标签。
对象模型
如下图所示,commit对象指向根tree对象,每个目录都创建了一个tree对象,每个文件都创建了一个blob对象。

浙公网安备 33010602011771号