一、SVN的基本概念
SVN是Subversion的简称
它是一个自由/开源的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。文件和代码存放在中心版本库,记录每一次文件和目录的修改,SVN允许把数据恢复到早期版本,或是检查数据修改的历史,防止同一模块的代码禁止同时被多个人修改。
二、SVN服务端安装
VisualSVN-Server-3.5.3-x64.msi
三、SVN客户端安装
TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi
四、SVN基本操作
必须掌握:
checkout-----》将SVN仓库的代码拷贝到本地
比如你现在参与一个团队的项目,项目代码在你之前肯定已经写了很多了,你可以通过checkout项目代码,获得整个项目。
update-----》获得SVN最新的代码
在你写代码的过程中,同事可能已经提交过代码到SVN服务器,而你本地显然没有同事新提交的代码,你可以通过updata SVN获得SVN最新的代码。
commit-----》提交代码到SVN仓库
当你完成一部分开发后,你可以通过commit提交代码到SVN服务器,这样别人就可以获得你写的代码,记得先updata再commit。
(一)Git和SVN的区别
1、SVN(集中式版本管理系统)
集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
Subversion属于集中式版本控制系统。
(1) 好处:(解决多人协作问题)
每个人都可以一定程度上看到项目中的其他人正在做些什么。
而管理员也可以轻松掌控每个开发者的权限。
(2)缺点:(特别依赖网络、依赖中央服务器)
中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。
如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。
Subversion原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
有很多人认为,集中式的版本控制系统在速度上和性能上是不足的。后来基于集中式的版本控制系统的不足,开发了分布式的版本控制系统。
(3)Subversion的特点概括起来主要由以下几条:
每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
提交必须有网络连接(非本地版本库);
提交需要授权,如果没有写权限,提交会失败;
提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。
2、Git(分布式版本管理系统)
以Git为例:
Git是一个分布式的版本控制系统,和集中式的控制系统很大的一个差异是,分布式的版本控制系统的服务端和客户端都有完整的一套版本库。那脱离服务端,客户端照样可以管理版本的。并且查看历史以及版本比较等相关操作,都不需要去访问服务器,也就是说分布式的控制系统比集中式的控制系统更能提高版本管理的效率。
Git记录版本历史只关心文件数据的整体是否发生变化,Git 不保存文件内容前后变化的差异数据。
实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息,并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。
在分布式版本控制系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。因此,你就可以在同一个项目中,分别和不同工作小组的人相互协作,你可以根据需要设定不同的协作流程。
另外,因为Git在本地磁盘上就保存着所有有关当前项目的历史更新,并且Git中的绝大多数操作都只需要访问本地文件和资源,不用连网,所以处理起来速度飞快。用SVN的话,没有网络或者断开VPN你就无法做任何事情。但用Git的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程的镜像仓库。
(二)SVN和Git的优缺点
1、SVN优缺点
(1)优点:
管理方便,逻辑明确,符合一般人思维习惯。
易于管理,集中式服务器更能保证安全性。
代码一致性非常高。
适合开发人数不多的项目开发。
(2)缺点:
服务器压力太大,数据库容量暴增。
如果不能连接到服务器上,基本上不可以工作,就不能提交,还原,对比等等。
不适合开源开发(开发人数非常非常多)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
注意避免中央集中服务器单点故障
2、Git优缺点
(1)优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
可以离线工作。
(2)缺点:
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
3、总结一下:
当研发成本比较低,协作开发人数不多,开发人员对于版本管理的水平参差不齐的时候,或者对于代码的安全性要求更高一点的时候,适合用SVN。
而对于很多人参与开发,代码量比较大,或者高频次协作,跨公司,跨地域合作的情况下,更适合用Git。