Git 是一个免费的、开源的『分布式版本控制系统』,可以快速高效地处理从小型到大型的各种项目。官网为:https://git-scm.com/。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性,其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
一、何为版本控制系统
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。最重要的其实在于可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
版本控制系统分为『集中式』和『分布式』两种,下面会详细讲到。
1.1 集中式版本控制工具
集中式版本控制工具:CVS、SVN(Subversion)、VSS 等。
集中式版本控制系统都具有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人都通过客户端连接到这台服务器,取出最新的文件或者提交更新。
- 好处:每个人都能在一定程度上看到其他人在做什么,管理员也能轻松掌握每个开发者的权限,并管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松。
- 缺点:中央服务器的单点故障会使得整个系统陷入瘫痪,无法工作。
1.2 分布式版本控制工具
分布式版本控制工具:Git、Mercurial、Bazaar、Darcs 等。
分布式版本控制系统没有单一的集中管理的服务器,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像到本地库,实际上是对整个文件仓库的一次完整备份。
- 好处:任意一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复;服务器断网的情况下也可以进行开发,因为版本控制是在本地进行的;每个客户端保存的是整个完整的项目,包含了历史记录,因此更加安全。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。因此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
二、Git 工作四大特点
Git 究竟是怎样的一个系统呢? 若你理解了 Git 的工具特点、思想和基本工作原理,用起来就会知其所以然,游刃有余。
① 直接记录快照,而非差异比较
Git 和其它版本控制系统的主要差别在于 Git 保存数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 。
而 Git 不按照以上方式保存数据,而是像一个快照流,对小型文件系统保存一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
② 近乎所有操作都是本地执行
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。
③ Git 保证完整性
Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符组成的字符串,基于 Git 中文件的内容或目录结构计算出来的。Git 中使用这种哈希值的情况很多,你将经常看到。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
④ Git 一般只添加数据
你执行的 Git 操作,几乎只往 Git 数据库中添加数据。 你很难使用 Git 从数据库中删除数据,也就是说 Git 几乎不会执行任何可能导致文件不可恢复的操作。
三、Git 的基本工作原理
在了解 Git 工作原理之前,我们需要介绍一些相关的概念,再过渡到 Git 的基本工作原理。
① Git 文件的三种状态
- 已修改(modified):表示修改了文件,但还没保存到数据库中。
- 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交(committed):表示数据已经安全地保存在本地数据库中。
② Git 项目的三个阶段
- 工作区:对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区:是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
- Git 仓库目录:Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
③ 基本的 Git 工作流程
- Step1:在工作区中修改文件。
- Step2:将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- Step3:提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
注意: 如果 Git 目录中保存着特定版本的文件,就属于已提交状态。 如果文件已修改并放入暂存区,就属于已暂存状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是已修改状态。
四、代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般简称为 远程库。
- 局域网
- GitLab
- 互联网
- GitHub(外网)
- Gitee 码云(国内网站)