一、简史
Git 是因为Linux 内核开源社区与分布式版本控制系统的BitKeeper的合作结束,人家不给用了,怎么办呢?自己开发一套呗,Git就诞生了。
二、基础
Git与(SVN,CVS, Perforce)有什么区别?
都是版本控制系统,我自己用过SVN和Git,最大的区别就是Git可以在家里不用连VPN就能够提交版本。而SVN就必须连网才可以。那么造成这种差异的原因呢?
因为两种系统的实现方式不一样。以SVN为例,SVN是记录每个文件的哪些内容变化,进行版本控制的。而Git则是比较整个文件的变化。这么说有点儿抽象,看图吧。
SVN等系统的记录版本的方式。

每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。Git 的工作方式就像下图所示。

Git几乎所有的操作都可以在本地完成
与svn总是从服务器更新数据相比,Git可以在本地完成很多的操作。因为 Git 在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。用 CVCS 的话,没有网络或者断开 VPN 你就无法做任何事情。但用 Git 的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程仓库。
时刻保持数据完整性
Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成,看起来就像是:
24b9da6552252987aa493b52f8696cd6d3b00373
Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
文件的三种状态
重点!重点!重点!
对于任何一个文件,在 Git 内都只有三种状态:
已提交(committed),
已修改(modified)
已暂存(staged)。
已提交表示该文件已经被安全地保存在本地数据库中了;
已修改表示修改了某个文件,但还没有提交保存;
已暂存表示把已修改的文件放在下次提交时要保存的清单中。
基本的 Git 工作流程如下:
在工作目录中修改某些文件。
对修改后的文件进行快照,然后保存到暂存区域。
提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。