迈进版本控制大门的第一步

作为一个后知后觉的程序猿,在学习 Android 开发一年多后才逐渐意识到对代码进行版本控制的重要性。之前几个人一块进行项目开发的时候,都必须要手动把别人的代码 Ctrl-C Ctrl-V 一点点地贴到最终的代码中,如果对方有个什么改动,又需要在贴一遍,实在是费时费力。所以,学习 Git 就相当有必要啦。

在学习的过程中,我看的资料是廖雪峰老师的 Git 教程,通俗易懂,可以非常快速地帮助大家入门。 看边教程边跟着一步步敲命令时,也在本子上记了不少的笔记,因此准备将它们整理一下,写成一个系列的博客,这就是第一篇了,在这篇博客中,会做一个 Git 的简单介绍(顺带着膜拜一下 Linus 这个神一般的程序员),之后会介绍如何进行 Git 的安装。

1. Git 的历史

Git 是由著名的Linux操作系统的开发者Linus用C写的一个分布式的版本控制工具,本意是用来进行Linux代码的管理。后来 Git 受到越来越多的程序员的喜爱,成为最有名的分布式版本控制工具。说起来这里还有一个历史的巧合,有着一段非常精彩故事:

Linus 在 1991 年创建了开源的 Linux 操作系统,Linux 多有名就不用再多说了。既然是开源的,也就意味着任何人都可以参与到这个操作系统的开发和改进中。事实上,Linux 的强大和成功也离不开这些优秀的开源参与者。

在很长一段时间内,这些开源参与者提供的代码都需要 Linus 手动合并到最终的发行版中(当然是有用的),原来大神也有这么苦逼的合并代码的经历。后来这些代码越来越多,大神一个人忙不过来了,就想到了使用版本控制工具(好像过程和我挺像啊)。

当然大神毕竟是大神,CVS和SVN这些集中式的版本控制工具他是看不上的,后来他选择了一款商用的版本控制软件 BitKeeper。Linus 和 BitKeeper 的公司 CEO Larry McVoy 是好友,Larry 说服 Linus 在内核开发中使用 BitKeeper,并且是免费的,前提是他们不能开发类似的版本控制工具。在使用了 BitKeeper 后,Linux 的开发步伐加快了两倍。

这本是一件对两方都有好处的事情,但是有人却对此非常不满。这些产生不满的人应该可以说是追求极致的 free/open software,他们坚决接受不了 Linux 这样一个完全自由的软件使用有知识产权限制的 BitKeeper,但是 BitKeeper 又是相当出色的,真正实现了分布式的版本控制。这时候这些人就想着去反向破译 BitKeeper,这对于 BitKeeper 的公司来说当然是不可容忍的,在多次的警告之后,他们决定停止向 Linux 提供免费的版本控制支持。这在我看来当然是可以理解的,毕竟知识产权摆在那里,如果什么都不做的话,以后生意不就没法做了(但是事实是 Git 出现后,BitKeeper 的生意才是真的做不下去了)。

后来,Linus 也决定正式放弃 BitKeeper,他用了两周的时间用 C 写出了 Git(不愧是神一般程序员),我想问,大神,你早干嘛去了?

在 Git 开发出来 11 年后,BitKeeper 也宣布开源。他们这样的结局实在有些遗憾,只能说,在计算机领域,开源的力量是无比强大的。

2. 分布式与集中式的区别

前面提到了 Git 是分布式版本控制工具中的代表,而集中式的版本控制工具,如 CVS、SVN 等,也被很多程序员所使用。究竟这两者有什么区别呢?

集中式的版本控制工具有一个存放在服务器上的公共版本库,开发者需要从服务器上下载最新的项目版本进行开发,开发完毕后再将代码上传到公共版本库中。这样的下载上传的时间开销不说,一个更大的问题是网络,集中式的版本控制系统必须联网才能使用,虽然现在网络很普及,但是还是存在没有网络的情况,这种情况下,集中式的版本控制系统就没有办法正常工作了。

分布式与集中式的不同之处在于,每个开发者都能在自己的本地电脑上拥有一个完整的版本库,所有的提交都会在本地版本库中进行保存,所有历史的版本信息不用联网就能够进行管理。当需要和其他人合作时,只需要将自己的修改 push 到对方,对方就可以看到这些修改了。同时,分布式的版本控制系统的安全性也要高一点,一个人电脑上的版本库丢失了,只需到其他人那里拷贝一下即可。

3. 结语

以上就是对 Git 历史的一些介绍,讲了一段蛮有意思的小故事,还比较了分布式版本控制与集中式的区别,总之是对版本控制系统以及 Git 有了一个大致的认识。下一篇就将从Git的安装开始进行逐渐深入的 Git 学习。