版本管理工具迭代史

2017-12-31  本文已影响0人  LightingContour

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还提供了以下内容:

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

SVN

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

Git

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



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

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

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


集中式版本控制系统

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


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

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

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

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

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

以上~

参考资料

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

上一篇下一篇

猜你喜欢

热点阅读