摘要:版本控制,即记录一个或若干文件内容变化,以便将来查阅特定版本修订情况以及回溯的系统。
集中式--svn
SVN, 全名Subvision; 作为集中式版本控制工具,版本库集中存放在中央服务器,team里每个人work时从中央服务器下载代码,是必须联网才能工作。个人修改后然后提交到中央版本库;对比最早的版本控制工具--cvs,svn解决了cvs的不稳定性,现在是开源社区的主流集中式版本控制工具.
Subversion的特点概括起来主要由以下几条:
1.每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
2.获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
3.提交必须有网络连接(非本地版本库);
4.提交需要授权,如果没有写权限,提交会失败;
5.提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
6冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能冲突.(建议每次提交前update)
分布式--git
Git ,开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库.
简略的说,Git具有以下特点:
1.Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
2.Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
3.甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
4.Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。
5.冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。
优缺点对比(面试常见)
SVN优点:
1、 管理方便,逻辑明确,符合一般人思维习惯。
2、 易于管理,集中式服务器更能保证安全性。
3、 代码一致性非常高。
4、 适合开发人数不多的项目开发。
缺点:
1、 服务器压力太大,数据库容量暴增。
2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、 不适合开源开发(开发人数非常非常多)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
Git优点:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。
缺点:
1、学习周期相对而言比较长。
2、不符合常规思维。
3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
总结:
工具没有好坏,只有适不适合;集中式在传统的企业团队开发里优势明显(推广成本,安全性),而分布式面向开源项目,或者工作机制比较自由的团队,个人。