SVN简介

SVN简介

SVN(Apache Subversion)一个*/开放源代码的版本控制系统Subversion在2000年由CollabNet Inc开发,现在发展成为Apache软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分
Subversion(SVN)一个开源的版本控制系统,一个跨平台的软件,Subversion管理着随时间改变的档案,这些档案放置在一个*档案库(Repository)中。这个档案库很像一个寻常的档案服务器,不过它会记住每一次档案的变动。这样就可以把档案恢复到旧的版本,或是浏览档案的变动历程,并可以查看数据的更改细节。许多人会把版本控制系统想象成某种 “时光机器”
(用于多个人共同开发同一个项目,实现共享数据,最终实现集中式的管理)


什么是版本控制系统(VCS)?

版本控制系统(VCS)是一个软件,帮助软件开发人员团队工作并维持完整的工作历史

版本控制系统(Version Control System),一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。用的比较多的如svn、git等


版本控制系统(VCS)的目标
(1)允许开发者们同时工作
(2)不会重写每个人的改变
(3)维持每个版本的全部的历史


VCS被分成两种

(1)集中式版本控制系统(Centrailized Version Control System,CVCS)
集中式版本控制系统,诸如 CVS、Subversion(SVN)以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的团队都通过客户端连到这台服务器,取出最新的文件或者提交更新

(2)分散式(分布式)版本控制系统(Distributed Version Control System,DVCS)
又称去中心化版本控制(decentralized version control),是一种版本控制的方式,它允许软件开发者可以共同参与一个软件开发专案,但是不必在相同的网络系统下工作

Subversion基于集中的版本控制系统,意味着使用统一的服务器让团队协作


SVN主要功能

①SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器
②SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等
③SVN大都采用图形界面操作,直观,上手快


(1)目录版本控制

CVCS只能跟踪单个文件的历史,不过Subversion实作了一个“虚拟”的版本控管文件系统,能够依时间跟踪整个目录的变动。目录和文件都能进行版本控制


(2)真实的版本历史

自从CVCS限制了文件的版本记录,CVCS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVCS里不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始


(3)自动提交

一个提交动作,不是全部更新到了档案库中,就是不完全更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题


(4)纳入版本控管的元数据

每一个文件与目录都附有一组属性关键字并和属性值相关联。可以创建并存储任何Key/Value对。属性是随着时间来作版本控管的,就像文件內容一样


(5)选择不同的网络层

Subversion有抽象的档案库存取概念,可以让人很容易地实作新的网络机制。Subversion可以作为一个扩展模块嵌入到Apache HTTP服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力。
除此之外还提供了许多重要功能,举例来说:有身份认证、授权、在线压缩、以及文件库浏览等等。还有一个轻量级的独立Subversion服务器,使用的是自定义的通信协议,可以很容易地通过ssh以tunnel方式使用


SSH(安全外壳协议)
SSH为Secure Shell的缩写,由IETF的网络小组(Network Working Group)所制定;SSH为建立在应用层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH


(6)一致的数据处理方式

Subversion使用二进制差异算法来异表示文件的差异,它对文字(人类可理解的)与二进制文件(人类无法理解的)两类的文件都一视同仁。这两类的文件都同样地以压缩形式储存在档案库中,而且文件差异是以两个方向在网络上传输的


(7)有效的分支(branch)与标签(tag)

在分支与标签上的消耗并不必一定要与项目大小成正比。Subversion建立分支与标签的方法,就只是复制该项目,使用的方法就类似于硬连接(hard-link)。所以这些操作只会花费很小,而且是固定的时间


(8)Hackability

Subversion没有任何的历史包袱;主要是一群共用的C程序库,具有定义完善的API。这使得 Subversion便于维护,并且可被其它应用程序与程序语言使用


版本控制术语

(1)仓库(Repository)

仓库是任何一个版本系统的核心。开发者们保存工作的总部,仓库不止处理文件还有历史记录,它需要访问网络,扮演服务器的角色,版本控制工具扮演客户端的角色,客户端可以连接仓库,那么他们就可以从仓库中存储或者提取。通过保存这些更改,一个客户端的更改可以被其他人检索到,一个客户端可以让其他人的更改作为一个工作副本


(2)主干|主线|主分支(trunk)

主要开发所在的目录,经常被项目开发者们查看
是用来做主方向开发的,新功能的开发应放在主线中,当模块开发完成后,需要修改,就用branch


(3)分支(branch)

分支操作用于创建开发的另一条线,当你想把开发进程复制进两个不同的方向是很有用的。比如,当你发布5.0版本时,你可能想从5.0的bug修复中分离出来创建一个开发6.0功能的分支

分支开发和主线开发是可以同时进行的,也就是并行开发,分支通常用于修复bug时使用


(4)标签(tags)

目录用于储存项目中被命名的快照,标签操作允许给予对仓库中特定版本一个描述和一个难忘的名字

用于标记某个可用的版本,可以标记已经上线发布的版本,也可以标记正在测试的版本,通常是只读的


(5)工作副本

工作副本是仓库的一个快照。这个仓库被所有的成员共享,但人们不直接修改它,相反每个开发者检查这个工作副本,工作副本是一个私人的工作空间,这里开发者可以独立于其他成员做自己的工作


(6)提交更改

提交是一个保存更改的过程,从私人工作空间到*服务器。提交后,更改对全部成员可用,通过更新工作副本其他开发者提取这些更改。提交是一个原子操作,要么全部提交成功要么回滚,用户绝不会看到一半完成提交


SVN优缺点

优点:

(1)管理方便,逻辑明确,符合一般人思维习惯
(2)易于管理,集中式服务器更能保证安全性
(3)代码一致性非常高
(4)适合开发人数不多的项目开发


缺点:

(1)服务器压力太大,数据库容量暴增
(2)如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等
(3)不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题


SVN工作原理

SVN简介
首先得有一个SVN的服务器,需要搭建一个服务器,然后很多的人就可以连接到这个SVN进行操作
操作有两种操作:①提交②更新

例如:
用户①把文件提交到了SVN服务器,其他的人就可以做更新,这样就可以实现文件的共享
注意:只要是连接到这个服务器的人都可以对提交的文件做更新和提交,只要有权限

所有人使用同一个服务器,就是集中式
每个人都是用的自己的服务器,那叫做分布式
Git就是分布式,这是和SVN最大的一个区别


概念

术语 描述
Repository(源代码库) 源代码统一存放的地方
Checkout(提取) 当手上没有源代码的时候,需要从repository checkout一份
Commit(提交) 当已经修改了代码,就需要Commit到repository
Update(更新) 当已经Checkout了一份源代码,Update一下你就可以和Repository上的源代码同步,手上的代码就会有最新的变更

(1)多人共享同一资源,并且可以对资源实现修改和更新
(2)记录资源的每一次变更,以及记录更改该资源的信息
(3)可以恢复到之前的任意一个修改点


SVN优于CVS之处

(1)原子提交。一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏
(2)文件操作历史。重命名、复制、删除文件等动作都保存版本历史记录当中
(3)保存方法。对于二进制文件,使用了节省空间的保存方法。(简单的理解,就是只保存和上一版本不同之处)
(4)目录也有版本历史。整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录
(5)分支开销。分支的开销非常小
(6)数据访问。优化过的数据库访问,使得一些操作不必访问数据库就可以做到。这样减少了很多不必要的和数据库主机之间的网络流量


SVN与GIT比较

(1)本质区别(集中式/分布式)

GIT跟SVN一样有集中式版本库或服务器。但GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上check out(检出)代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,就像在飞机上、地下室、电梯里等,仍然能够提 交文件,查看历史版本记录,创建项目分支
SVN必须连接服务器才可以操作
SVN是集中式,Git是分布式。SVN更适用于项目管理,Git适用于代码管理


(2)GIT把内容按元数据方式存储,而SVN是按文件

SVN所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果把.git目录的体积大小跟.svn比较,会发现它们差距很大。因为,.git目录是处于机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分 支,版本记录等


(3)Git直接记录快照,而非差异比较

Git和其他版本控制系统的主要差别在于,Git只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。Git并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一链接


(4)近乎所有操作都是本地执行

在Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用SVN的话,差不多所有操作都需要连接网络。因为Git在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征


Git与SVN区别点:
1.GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别
2.GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn、.cvs等的文件夹里
3.GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录
4.GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5.GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破





下一篇:Apache Shiro基本使用




上一篇:svn遇到的小问题


下一篇:尚硅谷—高级—Jenkins