Git 入门介绍

1、Git 诞生背景

Git诞生于Linux内核开源项目,Linux内核开源项目有着为数众多的参与者,绝大多数的Linux内核维护工作都花在了提交补丁和保存归档的繁琐事务上。于是,在2002年,Linux项目组开始启用一个专有的分布式版本控制系统 BitKeeper来管理和维护代码。可是到了2005年,开发BitKeeper的商业公司同Linux内核开源社区的合作关系结束,他们收回了Linux内核社区免费使用BitKeeper 的权力。这就迫使Linux开源社区(特别是Linux的缔造者Linus Torvalds)基于使用BitKeeper时的经验教训,开发出自己的版本系统。他们对新的系统制订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于2005年以来,Git日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

2、Git 特点介绍

2.1、直接记录快照,而非差异比较

Git和其它版本控制系统的主要差别在于Git对待数据的方式。其它大部分版本控制系统以文件变更列表的方式存储信息,它们存储的信息可以看作是一组基本文件和每个文件随时间逐步累积的差异。

git1.png

Git不按照以上方式对待或保存数据。反之,Git更像是把数据看作是对小型文件系统的一系列快照。在Git中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。另外,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个快照流。

snapshots.png

这是Git与几乎所有其它版本控制系统的重要区别。因此Git重新考虑了以前每一代版本控制系统延续下来的诸多方面。Git更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的VCS。

2.2、近乎所有操作都是本地执行

在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。如果你习惯于所有操作都有网络延时开销的集中式版本控制系统,Git 在这方面会让你感到速度之神赐给了Git超凡的能量。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。举个例子,要浏览项目的历史,Git不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。你能立即看到项目历史。如果你想查看当前版本与一个月前的版本之间引入的修改,Git会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。这也意味着你在离线或者没有 VPN 时,几乎可以进行任何操作。

2.3、Git 保证完整性

Git中所有的数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在Git不知情时更改任何文件内容或目录内容。 这个功能建构在Git底层,是构成Git哲学不可或缺的部分。若你在传送过程中丢失信息或损坏文件,Git就能发现。Git用以计算校验和的机制叫做 SHA-1散列。这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于Git中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373,Git中使用这种哈希值的情况很多,你将经常看到这种哈希值。实际上,Git仓库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

2.4、Git 一般只添加数据

我们执行的Git操作,几乎都是往Git仓库中添加数据。我们很少使用Git从仓库中删除数据,也就是说Git几乎不会执行任何可能导致文件不可恢复的操作。使用Git是一个安心愉悦的过程,因为我们深知可以尽情做各种尝试,而没有把事情弄糟的危险。