版本控制工具历史的10个里程碑

引言:“如果你想要了解真正的历史,你需要回到在打孔卡上进行人工比对的年代。” —— Jim Rootham

在这个为鳕鱼编写传记都能够流行的年代,写一本记录程序员如何存储代码——他们最重要的劳动成果的书一点也不疯狂。

既然你和我都没有时间来阅读或编写这样的一本书,我们打算用这篇博文来进行探讨。

这是一个重要的问题。(现在)版本控制产品非常普通而且很流行。然而,它经历了几十年的不断创新。在这个领域里最聪明的人的努力下,代码管理变得非常简单而且有效。每一步都是那么让人感到惊奇。

 

1. 源代码就是一个文本文件!(20世纪60年代)

现在看来,存储源代码和编写简单文档应该是一样的。但如果你简单读一下ASCII的历史就会知道,即使达成这样的共识也来之不易。

2. 人们可以手动跟踪代码版本!(20世纪60年代)

在没有软件的年代,所有事情都要从源代码开始。

“我工作的第一家公司有一个源码管理部门。当你把代码写好以后,将软盘交给源码管理部门一位漂亮女士。他们会及时更新函数库,用你的磁盘基于公司官方的代码构建产品交付给客户。” —— Miles Duke

3. 你可以为单个文件保留多个版本!(1972,1978)

采用奇特的交错编织文件格式,SCCS在版本控制领域称雄了10年之久。

记录单个文件的从一个版本到下一个之间的变化花费了几年的时间。“差异文件比较算法”是这个课题最近发表的一篇论文(1976)。

1982年,RCS反向使用diff文件(描述算法原文)打败了SCCS成为继任者,并让评论家大跌眼镜:

“一起出现的还有带有反向比较功能的RCS,我认为它非常棒。” —— 无名氏

4. 每个人都可以检出自己的拷贝!(1982)

在那个时候,人们工作时需要登录一台中央大型机并通过它一起工作。采用符号链接,RCS可以让每个人都工作在相同版本的代码上,而且每个人都有自己的工作拷贝。

“有一个叫做RCS的文件,实际上它十一个链接到RCS仓库的符号链接,你可以与其他小组成员一起使用。”  —— 耶鲁大学RCS使用介绍

5. 喔!你可以一次给多个文件进行版本控制!(1986)

令人吃惊的是,直到CVS出现之前,版本控制系统都只支持单个文件。当然,你可以使用通配符让RCS提交多个文件或者标记特定分支。但这些并不是版本控制系统的一部分。

CVS默认会递归修改所有文件。突然之间,软件从单个目录或文件变成了文本文件的递归树。

虽然由于不具备“原子性”导致实现的产品不尽如人意(后来Subversion在2000年解决了这个问题),但是瑕不掩瑜。

6. 两个人可以同时编辑同一个文件,并将他们的工作合并在一起!(1986)

20世纪90年代末,我在Creature Labs工作。我们从Visual SourceSafe(商业软件,微软公司发布)转到CVS(开源软件,由一些嘻皮士发布)。

坦率的讲,大家都怀疑CVS能否做到它宣称的那样:让多个人同时编辑同一个文件,并将他们的修改没有错误地合并到一起而不造成其他问题。

在我们开发Creatures 3的时候,SourceSafe的互斥锁成为了一个大问题。我们当时要添加垃圾搜集功能,这个功能会影响到几乎所有的代码。这个时候,我们的首席程序员不得不在周末检出每一个文件然后进行修改。

1986年的这篇论文记录下了这个奇迹。当Dick Grune和他的团队在荷兰开发一个编译器的时候,他们遇到了同样的问题,CVS从此应运而生。

7. 可以在远程服务器上共享代码仓库!(1994)

大多数时候,人们只在一台机器上使用版本控制。在1986年,人们可以通过RCS的一些版本以及CVS提供的远程文件共享机制以拥有远程代码仓库。

“假如RCS的某个版本可以通过远程服务器访问,那么开发人员就可以在代码仓库之外的机器上进行开发了。”  —— Dick Grune

然而,直到1994年TCP/IP协议的引入,这个想法才得以起步。

“直到Cygnus软件的Jim Blandy和Karl Fogel(这两位后来成为Subversion项目的主要开发者)为CVS发布了一些补丁,使得CVS客户端软件可以通过远程TCP/IP连接进行访问,CVS才真正变得无处不在。 ”—— Eric Raymond

8. 免费的开源版本控制主机服务!(1999)

这并不是源码管理技术的进步,但这的确是一个标志,Internet社区的发展与技术的进步同等重要:

“OSS以及成为历史,这已经成为一种趋势。John T. Hall 预见到,如果项目都是在线开发,那么之前开发的版本就在那里。开发平台服务是一种创新,但是没有人去做,我们就想‘为什么不呢?’”——Brian Biles

就像末日狂欢那样(因为股票的原因),VA Linux把SourceForge带到了这个世界上。这对新项目是天大的好消息(例如我的TortoiseCVS)。

在当时,在Internet上获得一台服务器很困难而且非常昂贵,进行源码管理和bug追踪也是如此。这项新服务尽管缺乏商业模式,却让无数项目更早地面世。

译注:OSS:一个综合的业务运营和管理平台,同时也是真正融合了传统IP数据业务与移动增值业务的综合管理平台。

9. 没有主代码库,你可以向所有人发布!(2005)

在21世纪头10年,有一股将版本控制实现完全分布式的潮流。

也就是说,在你本地的机器上存放的是一份完整的代码历史,可以轻易地与任何其他拷贝进行分支和合并。顺带说一下,也正是这个特性使得分支和合并变得更加容易。

我并没有记录某个第一次发明这种工具,而是按照它产品化以及流行的时间进行统计。鉴于此,将它定在2005年似乎有些不公平。Mercurial和Git发布于2005年4月。

这篇“分布式版本控制风险”(2005年底)介绍了这个革命性的创新。

10. 当你检出一个fork,你可以让大家都看到!(2008)

GitHub的成功有很多原因(尽管我之前提到过一些,要讲清楚这个问题还是需要单独写一篇文章讨论)。

关键在于,你可能甚至可以将一些自己做的不大的改动提交到别人的公共代码上。在GitHub之前,一般我们会保存在自己的电脑上。

如今,只需要简单做一个fork,或者甚至可以直接在浏览器上编辑,这样任何人都可以马上发现你代码中的bug。

尾声

快速回顾一下这几十年的进展。是的,计算机的发展做出了贡献。但更主要的是,这些都是人们为更好地协作而贡献出的聪明才智。

这让我想到,下一个会是什么?在版本控制领域还会有什么令人惊叹的事情发生?

推而广之,同样的事情会在其它领域发生吗?

作为核心信息基础设施,这种巨大的改进能够最终改善政府、医疗、新闻或者数据领域创新的障碍吗?

我有这种感觉,我们就要找到答案了。

原文发布时间为:2013-09-02

时间: 2024-09-17 03:39:19

版本控制工具历史的10个里程碑的相关文章

git版本控制工具(二)----本地版本库的常用操作

[正文] 在上一章节中,我们学习了关于Git最基本的用法,包括安装Git.创建版本库,以及提交本地代码.本章节中将学习更多的使用技巧.即:Git版本控制工具(一)----git的安装及创建版本库 我们先要做好准备工作,将某个项目创建版本库,我这里就新建一个Android项目GitTest,创建一个版本库.打开Git Bash,进入到这个项目的根目录下,然后执行git init命令,如下图所示:   这样,准备工作就做好了.   一.忽略文件: 版本库已经创建好了,接下来我们需要提交项目中的代码,

《Puppet权威指南》——3.2 版本控制工具安装与配置

3.2 版本控制工具安装与配置 Puppet是一款配置管理工具,其优势不仅在于配置和管理线上系统文件,还可以利用版本控制工具对线上系统和配置文件进行版本控制,如图3-6所示.这样,当线上系统出现问题时可以根据版本控制工具进行及时回滚,而回滚的功能可以将配置文件回退到上一版本或历史的某一版本,快速的回滚可以让我们将故障时间降到最低.目前流行的版本控制工具有很多,在这里推荐两款版本控制工具--Subversion和Git,这两款工具各有优势,都可以与Puppet结合使用,本书中案例主要使用Subve

淘宝,不仅是对中国互联网历史上的一个里程碑

马云创立的淘宝,不仅是对中国互联网历史上的一个里程碑,对于中国人的消费习惯也是一个巨大的改变.现在淘宝不仅是许多人购物的首选地,也是许多想创业的人的第一选择.但是人多了肯定会有竞争,毕竟淘宝也就那一亩三分地.现在的淘宝还适合创业吗?看看那些淘宝创业的实践者怎么说. 案例一:年轻人的创业热情不值钱 我是2011年年底入场,3000元起家,前两年是淘宝的红利期,算是比较好做,2013在淘宝上两家C店营业额250万左右,赚了60多万. 目前淘宝上的业务处于收割期,库存货物十多万.上月我临时决定辞退所有

黑客盯上美国助学申请工具漏洞 窃取10万纳税人信息

美国国税局(Internal Revenue Service,IRS)约翰`科士奇宁周四表示,美国学生申请助学金使用的一款在线工具遭遇黑客攻击,可能导致超过10万名纳税人的信息被窃. 科士奇宁周四在参议院财政委员会(Senate Finance Committee)听证会上作证称,当用户使用"数据检索工具"(Data Retrieval Tool)填写联邦政府助学金免费申请(Free Application for Federal Student Aid,FAFSA)时,IRS发现用户

Git版本控制工具(一)----git的安装及创建版本库

[正文] 一.初识Git: Git是目前世界上最先进的分布式版本控制系统(没有之一).它的开发者就是大名鼎鼎的Linux操作系统的作者Linus Torvalds.Git被开发出来的初衷是为了更好的管理Linux内核,而现在却广泛应用于各种项目中.Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等. 那那什么是版本控制系统呢?如果有一个软件,不但能自动帮我记

历史上10款设计最失败的键盘

键盘作为人机互动的主要操作工具,一直是消费者较为看重的配件.随着各大外设品牌在键盘做工方面的逐渐改进,如今的键盘不仅在外观上令人爱不释手,而且手感和功能都改进了不少.  05年荣获北美销量王的微软人体工学4000键盘  史上最糟糕的10款键盘 当我们敲打着舒适的键盘浏览各个网站时,你绝对不会想到,历史上还曾经出现过10款做工极其失败的键盘,这些产品大多产于19世纪70年代和80年代,在今天看来,它们的缺点的确不少. 1982年的Commodore 64键盘 Commodore 64是一段个人计算

《网站情感化设计与内容策略》一第10章 工具和技术10.1 我们所创作的东西

第10章 工具和技术 网站情感化设计与内容策略日常的内容策略总是有理由使人们困惑.我们所做的事情,总是随着一个项目到另一个项目而有所变化,而且囊括了从最单纯的分析到最高度创新性的全部范围内的工作.在这个行业中,当新网站发布的时候,视觉设计.信息架构师.前端开发人员,以及内容创作者的努力都可以被看作是在舞台中央的表演,而内容策略从根本上来说,就是后台的规则. 你看不见它,也无法点击它.对于网站访问者来说,通常不太可能有人会指着一个功能,然后说:"这是一个聪明的内容策略的成果!" 也许就是

Eclipse的版本控制工具

如何在Eclipse中进行版本控制?在Eclipse中集成Subversion的版本控制应该是最方便的,可能也是最佳的解决方案.两个原本都是Open Source的系统,可以非常方便地集成在一起.当然,候选方案还不只一种.使用比较多的是以下两种:Subclipse和Subversive. 1. Subversive 由Polarion Community开发,从他们的目标(a brand new Eclipse Client for SVN)就可以看出是准备打造全新的Eclipse客户端.曾经使

Git版本控制工具(三)----远程仓库GitHub的使用

[正文] 即使是周末,也不能停止学习的脚步,在之前的两篇文章中,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了.今天就来一起学习一下大名鼎鼎的GitHub网站是怎么用的.如果网站进不去,该怎么做你懂得.如果不嫌弃的话,可以用我的邀请链接:http://honx.in/i/U-mc6Oz5NGRmLX2S   这样的话,双方都能加十天的有效期,嘿嘿~~~ 一.GitHub的引入: