在面试的时候被问到平时喜欢用 Git 还是 SVN,他们之间的区别是什么?这自然就谈到了分布式和集中式的区别。作为一个学生党,免费的 Github 给我提供了很大的便利,我的所有项目都是放在 Github 上,毕竟 Github 还是一个全球最大的同性交友网站 ╮(╯▽╰)╭。下面就说说集中式和分布式版本控制的区别。
为什么使用版本控制
在我们平时的开发过程中,大部分情况下是团队开发,即使是个人开发,我们也想对整个项目进行代码管理与备份等等。每次复制一份达成压缩包分类命名这样的肯定不是一个河里的解决办法,这只会让我们的磁盘空间越来越小,备份版本越来越多。在团队开发的时候,对代码进行合并管理的时候,总需要一些工具可以自动合并,版本控制系统应运而生。运用版本控制系统,我们可以对代码进行版本管理,可以随时查看之前版本的内容,随时回溯到之前版本中。团队合作的时候也可以自动合并代码,而不需要用一个共享文件,或者是进行定期的备份。
集中式和分布式
版本控制系统也分为两类,集中式和分布式版本控制,我们所熟知的 Git 是分布式,SVN 是集中式,下面说说两者的区别。
集中式
集中式版本控制系统有一个中央服务器,每个人在工作的时候都需要从中央服务器获取最新版本,修改后提交到中央服务器。其他人再获取最新代码进行更改。这种方式的缺点就是,我们必须有一个中央服务器,由于网络原因没法连接到服务器,或者服务器宕机,我们就没法进行数据获取和提交。而且由于是联网操作,网络环境也会影响到提交和下载速度。
分布式
那么分布式版本控制系统是如何解决这些问题的呢?首先,分布式版本控制系统没有所谓的中央服务器,每个站点【就是自己用来开发的电脑】都有一个完整的版本库,我们可以在本地进行修改提交。这样在没有网络的环境下也可以进行开发。当需要进行代码合并的时候,我们只要把自己的版本库推送给你的合作伙伴就可以了,这样他就可以看到你做的更改。同时,他也可以把他的版本库推送给你,这样你就可以看到他的修改了。由于每个人电脑里都是一个完整的版本库,所以自己不小心丢失数据的话,从其他地方里拷贝一份就可以了。不过平时开发中,我们不会用这样笨拙的方式来互相推送代码。毕竟每个人的电脑不是24小时开机,总不能打个电话给他说:我要推送代码给你啦!(╯‵□′)╯︵┻━┻因此,Github 就起到了一个“中央服务器”的作用。我们把代码提交到 Github 上,任何人都可以随时下载合并代码,给我们提供了很多便利。
总结
看完以上的介绍,很多人可能会比较模糊,我们在开发的过程中不是总需要一个中央服务器嘛?感觉上平时使用 Git 或者 SVN 操作都是一样的啊!出现这种混淆是因为我们平时开发的时候总是有一个中央服务器,总是再联网状态下。首先说明,Git 不需要一个中央服务器,我们平时使用 Github 是为了让我们的团队开发更便利,如果你不嫌麻烦,完全可以不用中央服务器。而 SVN 是必须使用一个中央服务器,而且如果没法联网或者服务器宕机,所有人都没法工作。其次,Git 是可以在断网状态下提交,因为每个人的电脑里都是一个完整的代码仓库,包含提交历史等等。而 SVN 在断网的时候是没法提交的,也没法查看历史记录。当然,Git 优于 SVN 的不仅有上面的这些,还有很多强大的功能优于 SVN。比如强大的分支功能,Git 做一个小小的标记就会产生一个分支。而 SVN 是复制一份代码到分支目录。Git 还可以进行本地回滚【因为自己电脑里也是一个完整的版本库,但是提交到中央服务器上的时候可以减少冗余版本】
参考&感谢
以上这些知识都是参考下面这些连接里的内容,本意是我自己的学习笔记,特此对其进行感谢。