Subversion 作为一款开源且可自由使用的版本控制工具,能让使用者在任意时间、任意地点完成文件版本的切换。对开发者而言尤其如此:一个程序完成后往往不会只保留单一版本,若认为新版本的功能不如旧版本合意,便可借助这款软件将文件恢复到之前的版本。
Subversion 把用户的各种文件集中存放在一个中心版本库中。这个版本库外观上接近普通文件服务器,区别在于它会逐一记录每次对文件与目录所做的改动,因此可以把数据还原到早先的状态,也能查阅具体的修改内容。该版本库支持通过网络访问,用户因而能在不同电脑上开展工作;从一定意义上说,这种安排也让团队协作变得轻松便捷。
对于从事软件开发的人来说,若希望更有效地掌控代码版本,subversion 值得留意。这套版本管理工具开源且免费,在团队协作场景中同样能发挥较好的辅助作用。

版本化的目录
CVS 的版本追踪范围局限于单个文件,无法覆盖目录层面的变化;Subversion 则构建了一套“虚拟”的版本化文件系统,使整棵目录树的变更都能被记录。在该系统里,文件与目录同样具备版本化能力。
真实的版本历史
CVS 的跟踪能力仅限于单个文件,像拷贝、改名这类会改变目录内容的常见操作它都无法处理。同样地,在 CVS 里只要文件名相同,系统就认定它们共享同一段历史,哪怕这些同名文件彼此毫无关联。Subversion 则不同,它允许对文件和目录执行增加、拷贝、改名等操作,同名却无关的文件之间历史被错误关联的问题也一并得到解决。
原子提交
把一组相互关联的改动作为一个整体来处理:它们会一起进入版本库,或者全部都不进入。借助这种方式,用户能够将彼此有关的修改归并为一个逻辑单元,避免出现只把其中一部分改动写入版本库的情形。
版本化的元数据
每个文件和目录都带有一组自己的属性,也就是键值对,你可以按需创建并保存任意键值组合。这些属性跟文件内容一样,同样纳入版本控制范围。
可选的网络层
Subversion 对版本库访问方式做了高度抽象,便于开发者设计新的网络访问机制。它支持以扩展模块的形式集成进 Apache,由此获得稳定性与交互性方面的明显好处,并能直接沿用服务器已有的成熟能力,例如认证、授权和传输压缩。Subversion 本身也附带一个轻量且可独立运行的服务器程序,该程序采用自定义协议,能够方便地通过 SSH 进行封装。
一致的数据操作
Subversion 采用二进制差异算法来记录文件内容的变动,这种处理方式对文本文件(可读)与二进制文件(不可读)并无区别;两类文件都以压缩形式保存在版本库内,而差异数据则通过网络进行双向传输。
高效的分支和标签操作
Subversion 里创建分支或打标签,成本并不随项目体积增长。它的做法近似硬链接——对整个工程做一次机制性拷贝,所以这类操作耗时往往很短,且基本保持恒定。
可修改性
Subversion 的实现方式是一组高质量的共享 C 程序库,并配有清晰定义的 API,因此维护起来相当省力,与其它语言之间的互操作也很顺畅。它没有历史包袱,这一点在架构上体现得尤为明显。
·覆盖了CVS的绝大多数功能
Subversion 沿用了 CVS 的核心思路,并在此基础上做了若干调整,能覆盖 CVS 的多数功能;而 CVS 本身属于最基础的版本控制工具。
·目录的版本化
Subversion 会通过版本号来呈现目录名称。
·按版本进行复制、删除与重命名操作
复制也好,删除或重命名也罢,每一次操作都会被记录下对应的版本编号——这个设计初听确实让人感到有些意外。
·可灵活进行带版本管理的元数据操作
Subversion 支持将任意元数据附加到文件或目录上,这些属性以键/值对的形式存在,并且会纳入版本管理。对于修订版,Subversion 同样提供了附加任意键/值属性的方式;这类属性不受版本控制,原因是它们会自动把元数据挂接到版本空间中,不过随时都可以被修改。
·混合追踪
Subversion 自 1.5 版本起引入了混合追踪机制。
·文件锁
文件锁定机制已具备,多人同时编辑同一文件时,系统会向相关用户发出提示。
·对Apache网络服务的兼容能力,通过WebDAV/DeltaV协议实现
网络通信采用基于 HTTP 的 WebDAV/DeltaV 协议,站点服务端的网络存储功能则由 Apache 网络服务器承担。
·可执行的标签
Subversion 会针对可执行文件给出提示;若这类文件已纳入版本控制,它还会阻止该程序去检查其他目录。
·独立进程模式
Subversion 支持以独立模式运行。
·一个只读的存储镜像
Subversion 自带一个名为 SVNsync 的工具,它能够将主服务器上的文件同步至子存储服务器,并将这些文件标记为只读属性。
* 版本编号方式统一。在 CVS 中,每个文件各自按顺序编号,同一时刻各文件的版本号并不一致;到了 Subversion,每次提交都会让所有文件共同递增到同一个新版本号,哪怕这次提交根本没动过某些文件。因此,任意时刻各文件的版本号都保持一致,而版本号相同的文件就组成了软件的一个版本。
* 原子化提交:单文件或多文件的改动均以完整单元写入,中途若出现传输中断等异常,数据库不会留下残缺状态,数据也不会受损。
文件的重命名、复制与删除等操作,均会被记录在版本历史中。
针对二进制文件,采用了一种紧凑的存储策略——通俗地说,每个版本仅记录与前一版本存在差异的部分。
版本历史同样覆盖目录层级:整棵目录树支持移动与复制,操作门槛不高,且所有版本记录都会完整保留。
* 分支的开销非常小。
对数据库访问环节做了改进,部分操作无需再连接数据库即可完成,由此省去了大量与数据库主机之间原本不必要的网络数据往来。
TortoiseSVN 提供了图形化操作界面,因为 Subversion 本身仅作为服务器端存在,用户若想通过可视化方式使用它,就需要借助这类客户端工具来完成操作。
1、先创建一个文件夹,用来容纳全部仓库,本例中该路径为“D:\svnhome”。
2、创建独立仓库,用于存放各个项目(project1、project2)
svnadmin create D:\svnhome\project1
执行 svnadmin create D:\svnhome\project2 即可在指定路径下生成一个新的 SVN 仓库目录。
有些朋友在使用过程中可能会碰到下面这些情况:

工作目录也可以改为指向 Subversion 的安装路径。
以本机为例,Subversion 被装到了 D:\Program Files\Subversion 这个路径下,其可执行文件则位于该目录中的 bin 子文件夹内,也就是 D:\Program Files\Subversion\bin。

你同样可以借助Tortoisesvn来创建仓库:先建好一个仓库目录,例如D:\svnhome\project1,然后在project1文件夹上单击右键,操作如下图所示。
3、启动服务器
svnserve 以守护进程方式运行,并把 D:\svnhome 指定为版本库根目录,启动参数为 -d 和 -r。
完成上述步骤后,SVN 服务器便可正常访问,对应的访问地址是:
svn://127.0.0.1/project1 或 file:///D:/svnhome/project1
svn://127.0.0.1/project2 或者 file:///D:/svnhome/project2
若从其他设备访问,需将回路地址换成本机的局域网或公网IP;同时留意防火墙设置。
四、服务器简单配置
1、打开 D:\svnhome\project1\conf\svnserve.conf 这个库配置文件,把下面几行内容添加进去。注意每行开头不能出现任何字符,否则会引发报错。
anon-access = none
auth-access 设置为 write
password-db 这一项的值设为 passwd
authz-db = authz
2、打开 D:\svnhome\project1\conf\passwd 文件(该文件用于保存用户名和密码),在其中添加新的用户条目并写入
[users]
管理员账户的默认密码设定为123456。
3、打开 D:\svnhome\project1\conf\authz 这个权限配置文件,为 admin 账号添加写入权限,并保存。
[/]
admin=rw
此时,该用户已经能够访问你的 SVN 服务器。
上述操作流程针对的是 Windows 环境,Linux 下的做法与之大同小异,此处便不再展开说明。
服务器权限的高级配置先放一放,留待后续再聊。
(您的评论需要经过审核才能显示)
0条评论