1、Subversion是什么
Subversion是自由、开源的版本控制系统,允许数据恢复到早起版本,被誉为神奇的“时间机器”,简称SVN。
2、Subversion“俯视图”

“俯视图”的下端是保存用户所有版本数据的Subversion数据库,上端是客户端程序,管理着所有版本的本地映射(称为”工作拷贝“),在这两端之间是三种版本库访问层,可以通过网络服务器访问版本库,也可以直接绕过网络服务器直接访问版本库。
其中,部分模块介绍:
mod_dav_svn:Apache HTTP服务器的插件,使得版本库可通过HTTP或HTTPS协议访问。
svnserve:单独运行的服务器,可作为守护进程或由SSH调用。使得版本库可通过svn或svn+ssh协议访问。
3、Subversion有什么特点
1)基于目录的版本控制
不但能版本化文件,还能版本化目录。可对文件或目录进行拷贝,改名和移动等操作,这些操作均在版本控制之下。全局版本号。SVN的版本号针对整个目录树,而非单个文件。每一个版本号代表了一次提交后版本库整个目录树的特定状态。一个文件的修订版本N和M并不必有所不同
2)原子提交
All or None
3)高效的分支(branching)与标签(tagging)功能
标签功能,通俗的讲,标签就是某个时间点的快照(snapshot),我们可以在项目进行到一些重要的里程碑之时为之建立标签,这样可以方便以后随时取出这些历史版本。尽管SVN本身就有随意取出任何一个历史版本的功能,但是标签的作用主要是为了给这些特定的历史版本取一个友好的名字,以方便使用和维护。
分支则是用于创建多个并行的工作线,比如,当一个项目需要为某个用户提供一些特殊的功能时,那么就可以为之创建一个分支,这样能够保正大部分代码的共用,也使得整个项目变得容易维护和管理。
SVN对于分支和标签的实现都是一样的,并且采用了与Unix/Linux硬链接(Hard-Link)类似的机制,即是说,当我们创建分支或标签时,SVN并不会立即为之创建一份拷贝,而是创建一个链接,只有当这些文件以后被修改时才会真正产生一份副本。这种“缓式拷贝”方法是一种常见的优化方法,能够有效的节约空间。
分支和标签又的不同:标签意味着不会再对其进行修改,分支意味着会对它进行开发。
4)多种访问方式
SVN提供了一个抽象的网络访问层,可以通过不同的协议来对其进行访问:(1)本地文件直接访问;(2)通过Subversion-aware Apache服务器WebDAV协议的HTTP和HTTPS;(3)通过svnserve服务器的svn和svn+ssh协议。
5)对二进制文件的支持
SVN使用一个二进制差异算法描述文件的变化,对于文本(可读)和二进制(不可读)文件其操作方式是一致的。这两种类型的文件压缩存储在版本库中,而差异信息在网络上双向传递。
6)Windows下与资源管理器集成的客户端:TortoiseSVN
SVN本身只提供命令行的操作方式,TortoiseSVN是第三方开发的图形化界面,它的出现使Windows下的版本管理变得非常方便。
7)平台无关
SVN秉承了开源软件的一贯优点,无论是Windows还是Linux平台,都可以相互访问SVN服务器。
4、常用的一些命令
1)import:将未版本化的文件纳入版本控制并提交
2)checkout:从版本库中检出一个版本,创建本地工作拷贝
3)commit:提交本地文档到服务器
4)update:更新工作拷贝
5)add,delete,copy,move:增、删、复制、移动文件或目录
6)diff:检查文件行级别详细差异
7)revert:恢复
8)resolve:解决冲突
9)list:显示文件目录
10)log:查看历史记录
11)status:检查状态差异
5、Subversion编辑文件模式
1)拷贝-修改-合并模式
2)锁定-修改-解锁模式
6、Subversion冲突解决策略
在使用Subversion的过程中,当两个或两个以上的developer共同修改各自本地同一文件,在commit时就会造成冲突。另外,解决冲突也是Subversion中相对较复杂的过程,下面就如何在Subversion中解决冲突说明一下:
一般的,文件有四种状态,执行commit与update会这样:
1)本地文件未修改且是最新版本
commit 不做任何事情;
update 不做任何事情;
2)本地文件已修改且是最新版本
commit 会成功提交;
update 不做任何事情;
3)本地文件未修改且非最新版本
commit 不做任何事情;
update 更新最新版本到本地;
4)本地文件已修改且非最新版本
commit 报”out-of-date“的错误;
update 试图合并到最新的版本;
当遇到冲突首先使用subversion进行自动合并,如不能进行自动合并,需要人工解决冲突,执行resolve,再执行commit提交。一般的,如果当两个或两个以上的developer共同修改同一文件的不同行,可以自动合并;若出现多人修改同一行,则需要人工解决冲突,选择使用哪一个developer的修改。
为了尽量避免出现冲突,应当养成良好的习惯,即在编辑一文件前,先执行update,使得本地为最新的版本,编辑完后再及时commit。
浙公网安备 33010602011771号