目录
注:本文图文以proGit为基础
为什么要版本控制?
为了能够及时回溯项目以前的版本
版本控制系统
本地版本控制系统
RCS:保存布丁,也就是各版本修订前后的变化(有点像差分)
集中化的版本控制系统
多个客户端连接同一个服务器,取出文件或提交更新

好处是更容易管理,坏处就是这个服务器得稳定,得通过异地容灾等方法降低风险
分布式版本控制系统
于是乎,分布式的就诞生了,客户端不再是提取当前最新版本的文件快照,而是将整个代码仓库完整的镜像下来,包括历史记录,那么即使服务器故障,我们仍可以通过镜像进行复刻

Git是什么?
直接记录快照

其他大部分系统以文件变更列表的方式存储信息,可以将这些信息看作是一组基本文件和每个文件随时间逐步累积的差异(基于差异 delta-based )
然而Git是将数据看作是对小型文件的快照,每当提交更新或保存项目状态的时候,会为全部文件创建一个快照并保存这个快照的索引 。如果某个文件没有修改,那么不会重新存储 ,而是保留一个链接指向之前存储的文件

Git更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具
几乎所有操作都是本地执行
在Git中大多数操作只需要访问本地文件和资源,因为在本地磁盘上就有项目的完整历史,无须从远程服务器拉回。意味着你可以随心所欲地在本地进行操作,然后等有条件了再上传服务器
保证完整性
Git中所有数据在存储前都会计算校验和,然后以校验和来引用。这意味这无法在Git不知情的情况下更改任何文件或者目录。如果你在传输中丢失信息或损坏文件,Git就能发现
Git计算校验和的机制叫做SHA-1 hash。Git数据库中保存的信息都是以文件内容的哈希值作为索引
Git一般只添加数据
一旦你提交快照到Git中,就很难丢失数据,那么我们也就没有必要担心误删了数据
三种状态!
Git的三种状态
committed 已提交 修改了文件,但还没有保存到数据库中
modified 已修改 对已修改文件的当前版本做了标记,使之包含在下次提交的快照中
staged. 已暂存 数据安全地保存在本地数据库中
Git的三个阶段
工作区 对项目某个版本独立提取出来的内容。这些文件放在磁盘上供客户端使用或修改
暂存区 暂存区是个文件,保存下次将要提交的文件列表信息,也就是"索引"
Git仓库 保存项目的原数据和对象数据库,供计算机克隆仓库
Git基本工作流程
1.在工作区修改文件
2.将下次要提交的更改选择性暂存,只会讲更改部分添加到暂存区
3.提交更新,将暂存区文件快照永久性存储到Git仓库