1 Git 是什么?

Git 是一个版本控制系统(VCS),通俗一点说,就是一个管理你的代码历史记录的工具。 为什么要管理代码记录呢?因为你可能需要恢复过去删掉的代码,以及处理多个人对同一份代码编辑的情况,手动管理起来会特别复杂,这时候就需要一个版本控制系统了。

2 版本控制系统

版本控制系统(VCS,Version Control System)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

一般人的做法是复制多个目录,然后再给目录打上时间或者序号标签,下图所示的文件夹就是以 v1、v2、v3 代表不同版本。这样做的确很简单,但是它有一个很大的缺点就是容易犯错。

如果你一不小心会写错文件或者是覆盖了不该覆盖的文件,Ctrl + Z 是挽回不了你的损失的。可能更多是出现这样一种情况,自己记不得要找的文件存放在哪里了。

这下你明白有一个版本控制系统的重要性了吧~如果你为上述事情感到痛苦,来了解 Git 吧!

3 Git 的特性

1 分布式

在个人项目中,使用 Git 的场景一般是这样的,在工作中不断的修改代码或者文档,每次修改完毕后就告诉 Git 你做了哪些修改,也就是这个版本和上个版本有哪些不一样的地方,Git 会完整的记录下你这次提交的内容。

当我们处理大型项目时,一个人无法完成,就会进行多人协作开发。那如何进行多人版本控制管理呢?首先要做的是 Git 仓库放在远程的服务器上,这样大家都可以对它进行推送和拉取代码。

既然 Git 仓库在服务器上,那是不是每次都要有网络才能进行提交呢?!不,那岂不是没网络不就没法工作了吗?写好的代码损坏了或者误删了怎么办?这里就是体现 Git 分布式特性的地方了,它可以让你在没有网络的时候在本地进行提交,等网络恢复了之后再上传到仓库,而类似的工具 SVN 则不行。

2 完整性

完整性是指保存的文件的完整性,Git 在内容存储上使用了 SHA-1 哈希算法,你可能会问,什么是哈希算法呢?看下面:

哈希算法(Hash),例如 MD5 和 SHA-1,就是可以将任意长度的信息映射成固定长度的信息。一个文件 Doc1 通过哈希算法后会得到【42C1..21】这样的一段信息摘要,只要文件 Doc1 没有被修改过,通过相同的哈希算法总是得到相同的信息摘要。另一个文件 Doc2 因为内容与 Doc1 不同,通过哈希算法后就会得到不同的信息摘要【3E2A..AE】。

Git使用这套算法来保证数据的完整性。如果文件出问题了 Git 能立即察觉到,确保在遇到磁盘故障和网络问题时降低对 Git 仓库的破坏。

还有很多是版本控制工具的特性,需要你亲自去尝试一下才知道。

4 Git的来历

看了前面这么多介绍,大家一定觉得 Git 很厉害吧~它的诞生是很有故事的。

Git 是 Linux 的缔造者 Linus Torvalds 开发的。开发这样一个工具的主要原因是,BitKcheper 公司不再为 linux 开发者免费提供版本控制工具,所以 Linus 一生气就自己开发一个更好的(对,没错,就是一生气!),于是就有了如此强大的 Git。这导致一件事情——你现在有听过 BitKcheper 是什么吗?

顺手推荐一下 Linus 的自传《只是为了好玩》,在第一张序言中聊起生活的意义,Linus 这样说:

“我对生活的意义有一些看法。咱们可以在第 1 章跟读者说一下生活的意义来钓他们上钩,等他们上钩,并且花钱买书以后,我们再随便扯点别的把剩下的章节糊弄过去。”

哈哈哈,这样的生活态度有点羡慕呢!