他只想在乡村安静地写代码,却一不小心改变了全球程序员的命运!

0 1天才程序员1993年,开发著名软件Cygwin的公司Cygnus Solutions招募了一名天才程序员吉姆·金登 (Jim Kingdon)。
但是吉姆并不想搬到Cygnus所在硅谷,他想住在弗吉尼亚州一个乡村的公社(commune )里。Cygnus公司很重视人才,他们专门为吉姆·金登一个人拉了一条帧中继线(这在当时价格可不低),让他可以远程工作。问题是Cygnus使用CVS来管理源代码,CVS是荷兰阿姆斯特丹自由大学讲师Dick Grune在80年代开发的一个程序,当时只能在单机使用。
(Dick Grune)用户需要从代码仓库中checkout代码副本,存放在自己的home目录,修改后commit回代码仓库。所以住在乡村的吉姆·金登虽然有了网络,但是还无法远程登录CVS,在家工作。这根本难不住吉姆这样的天才黑客:让CVS支持网络不就行了吗?说干就干,他拿到CVS的源码,研究了一番,把CVS拆分成了客户端和服务器两个部分。1993年的网络非常缓慢,吉姆·金登一不做二不休,干脆设计了一个全新的、高效的通信协议,极大地减少了网络往返次数,降低了延迟。服务器暴露在互联网上,必然要考虑安全问题,Jim Kindon于是又增加了Kerberos 认证。
一套组合拳让CVS脱胎换骨,成了当时非常先进的软件,大大超越了同时代的许多工具。Cygnus 是一家扎根于黑客文化的公司,也很乐意看到吉姆·金登对CVS做出这样的修改。现在,吉姆·金登可以愉快地远程工作了,从湾区的 CVS 存储库中取出代码,将其checkout弗吉尼亚自己的计算机上,随心所欲地进行开发,并在完成后将其commit回去。0 21990s:CVS黄金时代照理说,开发了这么一个革命性的软件,又遇上了开源的浪潮,全球的开发者都是潜在的用户,吉姆·金登完全可以成立一个公司,提供技术支持和咨询服务,弄不好就走上人生巅峰了。但吉姆·金登魔改CVS,只是为了方便自己工作,只想在公司内部使用,根本没有想到对外公开!不仅如此,在解决了自己的问题以后,他就把注意力转到了别的方面,从黑客界消失了。这时候第二个吉姆出现了,吉姆·布兰迪(Jim Blandy)是吉姆·金登的大学室友,他和朋友进行远程协作时也遇到了类似的问题,只能通过电子邮件来发代码补丁,极其麻烦。
这时候他听说了被魔改的网络版CVS,大喜过望,马上给吉姆·金登写信,希望能使用魔改版。吉姆·金登当然同意分享代码,但有一个条件:不能问他问题!因为他对维护开源软件的各种琐事没有兴趣,也不想处理用户的支持请求。吉姆·布兰迪就想,这么有用的软件,没人做技术支持,多可惜啊!看到商机的吉姆和朋友干脆成立了一家叫做Cyclic Software的公司,专门提供网络版CVS(被大家称为Cyclic CVS)的技术支持和咨询服务。开源、免费、跨平台的Cyclic CVS彻底改变了开源协作方式,GNU项目、FreeBSD、Apache HTTP Server、KDE、GNOME、Mozilla、Perl、Python等著名开源项目纷纷采用CVS保存自己的代码库。当时最大的开源平台SourceForge也在用CVS,CVS成了开源世界的标准。
0 32000s:SVN成功接棒虽然Cyclic CVS风靡全球,解决了开源世界的协作的难题,但是它最初的设计缺陷也让用户抱怨连连:1.缺乏原子提交在 CVS 中,每个文件的更改是独立提交的,多个文件的变更没有任何关联。A 和 B 文件属于同一次修改,但由于并非原子提交,可能 A 提交成功,而 B 失败,导致代码库处于不完整状态。2.update 操作时非常低效CVS 并不存储整个项目的完整快照,而是对每个文件单独管理版本,如果代码库有 10,000 个文件,但只有 3 个文件被修改,CVS 仍然需要通过网络检查全部 10,000 个文件,造成巨大的性能浪费。3.创建分支非常困难。CVS 创建分支时,实际上是为每个文件的历史记录打上一个分支标记,当代码库包含数十万文件,非常耗时。在整个90年代,CVS没有好的免费开源替代品,大家还是不得不使用。每天都在使用CVS的吉姆·布兰迪一直在构思,怎么重新设计一下CVS,彻底解决这些问题。新系统的名称他都想好了,叫Subversion。
正好,一个叫做CollabNet的公司也受不了CVS了,掏钱资助吉姆·布兰迪等5个人把Subversion给开发出来。当时吉姆已经在红帽公司工作,红帽也非常慷慨:你去吧,什么时候把Subversion开发出来再回来!开发工作于2000年2月启动,5人目标明确,配合默契,按模块分工,每个人专注于自己的部分,吉姆主要负责 服务器端,而其他人分别负责命令行工具、工作目录库等部分。一开始他们还使用CVS来管理Subversion的源码,一年以后,Subversion的主要功能已经完成,可以开始“吃自己的狗粮”,用Subversion来管理Subversion。Subversion彻底解决了CVS的问题,实现了原子提交,迅速地创建分支等功能。大家看到更好用的Subversion,纷纷抛弃CVS,上了Subversion的大船。SubVersion成为了21世纪头10年最主流的版本控制系统。
0 42010s:Git称王就在Subversion如日中天的时候,2005年,Linux社区发生了一件大事!由于有人对BitKeeper做逆向工程,BitKeeper停止向Linux社区提供免费版本。Linus只好暂停了Linux的开发,卷起袖子自己开发了一个版本管理软件:Git。
和Subversion相比,BitKeeper和Git代表了另外一个重要的方向:分布式版本管理。每个人都有一个本地的代码仓库,可以在本地随意折腾,即使没有网络也具备完整的版本管理的能力。本地开发结束后后向服务器端的代码仓库提交就行。这种方式更加符合开源软件的全球化协作,所以Git开始走出Linux开发社区,慢慢地蚕食Subversion的市场。2008年,GitHub成立,不但给Git 用户提供了便捷的代码托管服务和丰富的协作功能(Pull Request,Issues),还让程序员可以关注自己感兴趣的用户和项目,成为程序员社交的重要平台。
短短的两三年时间内,GitHub吸引了Ruby on Rails,jQuery,Node.js,Bootstrap、Redis、Python、Puppet、Chef、Elasticsearch等一大批著名项目入驻。
到了2015年,Git 成为程序员最常用的版本控制工具,占据绝对主导地位。SVN 的市场份额逐渐缩小,成为少数遗留项目/特殊项目的选择。就连Subversion的作者吉姆也开始奉劝别人:别用使用SVN了,它已经过时了......
从CVS到SVN再到Git,20年间代码版本管理工具迭代了三次。如今Git是全球霸主,被大家使用得多了,它的痛点问题也在慢慢暴露。颠覆它的工具可能正在酝酿之中,也许某一天,Linus也会说:别用Git了,它已经过时了......全文完,觉得不错的话点个赞或者在看吧!
分类