版本管理工具迭代史

From past to now

这周在公司的通知邮件里看到了关于SVN下线一年,即将彻底清空公司所有SVN库的提醒。突然有了个想法,这里就梳理梳理版本管理工具的迭代史吧~

还是老样子,难免疏漏,若有偏差,欢迎各位大佬指正

正文

why exist?

为什么会有版本管理工具出现呢?
相信大家都遇到过类似的一个问题:我写一套代码或者软件,最初的版本做完了后,又因为一些原因要进行更新。这时候我们有时想要在保存了原本版本的基础上,再更新出一个新版本。通常我们就会另存一个"XXX-更新"了事。但是之后如果又有新更新了,我们又会另存一个"XXX-第二次更新";同时,如果还和其他人协作,命名也就更麻烦,并且协作的另一方电脑里的版本也很难控制和整理……不仅如此,有时胡乱取了名字保存了,还会出现不知道哪个是最新版本的情况。当然,这个时候可以在把文档选中看文件的更新时间解决,但是若有频繁的更新,不仅仅会看着很乱,还会占用我们电脑许多的存储空间。为了解决这个问题,版本管理工具就应运而生啦。

time flies...

时光飞逝,版本管理工具也经理过多次迭代,这里就简要梳理下从CVS到SVN,再到GIT的变迁史吧

tell me the story.

CVS

现在能了解到的较早并常用的版本控制软件应该就是CVS了。
CVS是一个C/S(Client/Server)结构的代码控制软件。一看用户端-服务端就明白,这个软件处理版本更迭的方法就是设置一个主服务器管理所有版本的迭代。
比如,程序员A,B和C一起写代码。他们在自己的电脑里安装了CVS用户端软件,并且在一台服务器上建立了一个用于存放代码的源代码库。当A完成了初版程序后,他会将这个程序的所有源代码通过CVS软件提交到库里。B要使用A的代码时,就要从库里down下来A的代码,再在他本地进行更改,更改完后再提交到源代码库里,若C更改则同理。这样就实现了多人协作开发。
但是若仅有以上功能,那就太low了。
CVS还提供了以下内容:

  • 允许同时更改代码
    当A从库里下载下代码版本Old,在更新代码的途中,而B也要进行更改怎么办呢?你可能想:那就B先改呗!不过这样就会导致一个问题,最后提交的人会完全覆盖掉前一个人的更改,因为A和B都是基于版本1更改的代码,若允许同时更改,A先提交了版本New A,B又在之后提交了版本New B,New B版本中没有New A中更改的数据,最终会导致覆盖。

所以在CVS之前,版本控制系统都有签入签出记录:这部分代码被A拿去改啦,其他人直到A改完,都不能动这部分代码!~
而CVS就解决了这个问题。它拥有自动合并的功能,会检索出文件的不同点,并进行合并。当然,如果有不能安全处理的地方,它也会提醒程序员们自己来进行手工合并。

  • 同文件保存所有版本&允许版本回退
    有时候你可能发现最新版本的代码被B还是C或者哪个蠢蛋改错了,导致一系列崩溃无法运行。这个时候就需要你进行版本回退啦。CVS会在你的文件里加入一些额外信息,以记录每个版本。如果你需要回滚代码,很简单——找到想要回退到的版本,跳转过去就行了。(当然,这需要花费一些时间)。

SVN

SVN(Subversion)是一个开源的代码版本控制系统,设计的目标就是取代CVS。现在仍有部分公司和企业在使用SVN用于版本管理。
从CVS更迭到SVN有诸多因素,比如能够重构以及对目录进行操作等等,并且因为CVS是单向差异文件传输而SVN为双向,使得后者会比前者快很多。细节也有不少,
简要概括下,SVN有以下的特点:

  • 同样的C/S结构
    这个没有多少变化。(也是之后Git改进的要点)
  • 速度快
    CVS因为架构的问题,速度比较缓慢,而SVN在这里做出了改进。它在网络上仅传输很少的信息。但是相应的它需要巨大的存储空间,因要完全备份所有的工作文件。
  • 能够对目录进行操作
    过去CVS是无法对目录进行操作的,删除文件夹这种事情只有库的admin才能跑到服务器上删除。
  • 简单易懂
    CVS的配置弄起来特别的复杂,而SVN配置起来就简单多了。
  • 更智能的差异比较
    自动化实现的升级~
    这里贴一个较为详细的资料,喜欢的同学可以多了解:
    SVN与CVS两者间的比较

Git

终于到Git了,这也是目前使用比例最大的版本控制系统了~



Git与前两者最大的不同点就是采用分布式而非集中式。
集中式就如同CVS和SVN,版本库是要集中放在中央服务器的,程序员A要更新文档or代码时,就要先从中央服务器down下来最新版本,更新完后再上传上去。而分布式版本控制系统没有中央服务器,每个人的电脑上都有一个完整的版本库!

这里摘抄廖雪峰老师所写——传送门

集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。


集中式版本控制系统

那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。


Git-分布式版本管理系统

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

这里还有Git诞生的轶事,也是特别的有趣,有兴趣的同学可以传送。这里就不贴啦(一贴上来就全搬过来了,廖雪峰老师写得太好,没什么可改的(〃ノωノ))
Git的诞生-廖雪峰的官方网站

Git自己的特点,这里总结下,有如下几点:

  • 分布式
    不必联网,避免网速烦恼;不用早上上班pull下班push,想啥时候更新就啥时候更新(当然最好每次更改都尽快提交,要不然管理员催死你啊(`・ω・´))。

  • 先进的版本管理——使用指针
    Git是使用指针来管理版本的,关于指针,学过C++的同学都知道。

当你退回版本时,实际上只是更改了指针的指向,这就比前两个老前辈在速度上有了质的提升。
同时,这也就代表Git支持回滚版本。Crash?没事!直接回滚~把head指针直接指向完好的版本就OK!

  • 分支管理
    程序员A想要做软件正式版,程序员B想要在软件正式版制作的同时拉出来一个Pro版,程序员C想要做一个Lite版。怎么办?使用三个库?
    Git使用了分支管理,允许创建多个分支,你可以使用一个库管理同一代码的不同版本,而且,想合并merge时,随时奉陪~

  • 标签管理
    程序自己生成的版本名称又臭又长,举例——版本号1829asdJ01t,输入时是不是特别麻烦?Git拥有标签管理的功能,给你的稳定版本取个标签吧~ Beauty1.0,这样是不是就很好找啦~

更多关于Git的详细的资料可以去廖雪峰老师的官网了解~这也是我认为最好的教程网站之一啦。

以上~

参考资料

CVS-百度百科
SVN-百度百科
SVN与CVS两者间的比较
廖雪峰的官方网站-git教程

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 源代码管理工具的起源 为什么会出现源代码管理工具? 为了解决在软件开发过程中,由源代码引发的各种蛋疼繁琐问题 源代...
    小白文_Vincent阅读 3,163评论 2 8
  • 看完了演宝玉的欧阳奋强写的1987,我们的红楼梦一书,书中有好多精彩的剧照,想以此中方式留下来。
    楚樱宁阅读 1,518评论 0 0
  • 现在好多人都不明白关系是什么,不明确的关系会断送你所有的付出。 我最深刻的就是工作上的关系, 比如...
    你早有打算阅读 359评论 0 0
  • “一切都会过去的”,我越来越深信着这句话… 一个人,也许只有当接二连三的突然事件袭到你头上的时候,而你却毫无准...
    沉墨韵阅读 324评论 0 0