Git是什么?
Git是一个分布式 版本控制软件。它相当于一个小型的文件管理系统。通过Git管理的项目、代码等任意文件,被Git所存储的信息是一组基本文件和每个文件随时间逐步累积的差异(基于差异的版本控制)。
- 分布式:像 Git、Mercurial、Bazaar 以及 Darcs 等版本控制系统,均采用了分布式管理,客户端会把代码仓库完整地镜像下来,包括完整的历史记录。 若协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 基于分布式的版本控制系统的每一次的克隆操作,都是一次对代码仓库的完整备份。
- 版本控制:对于一个采用了版本控制系统(VCS)的项目或文件,用户可以将选定的项目或文件回溯到之前的状态。用户可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。
Git的特性
Git对待数据像是一个快照流
在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
Git几乎所有的操作都是在本地执行
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
Git可以保证完整性
Git 中所有的数据在存储前都计算校验和(SHA-1 散列(hash,哈希)),然后以校验和来引用。这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
Git一般只添加数据
对于大多数执行的 Git 操作,几乎只往 Git 数据库中 添加 数据。 你很难使用 Git 从数据库中删除数据,也就是说 Git 几乎不会执行任何可能导致文件不可恢复的操作。
Git的三种状态
Git 有三种状态,所有文件可能处于其中之一:已提交(committed)、已修改(modified) 和 已暂存(staged)。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区 以及 Git目录。
- 工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
- Git仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
基本的Git工作流程
- 在工作区中修改文件。
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。
如果文件已修改并放入暂存区,就属于 已暂存 状态。
如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。