最近部门重新搭建了SVN服务器,我全程参与了过程,顺便东拼西凑点东西写了一份简单的文档,希望对大家有用,表述不准确的地方还请大家多多拍砖:)
工具概述
SVN【subversion】是目前常用的版本管理工具,当前,绝大多数开源软件都使用SVN作为代码版本管理软件。简言之,SVN就是一个简单方便的配置管理工具,用于控制文档和源代码的管理
SVN访问结构模式
上图可以看出,SVN是一个典型的C/S架构,服务端维护全部数据以及更改的记录,客户端维护一个本地的工作副本:SVN的访问由客户端和服务器共同完成,服务器端用于保存各类文档与代码,用户需要获取相关资料时,可通过SVN客户端软件发起请求,相关授权验证通过之后,可获取到相关代码和文档资料。
SVN工具的特点
实际上,常见的资源配置管理工具除了Tortoise SVN之外,比较出名的还有CVS,Rational ClearCase,VSS,Git等等,严格讲,这几种工具各有长短,当然最终目的都是为完善代码与文档的管理与控制。
针对SVN来讲,其优缺点主要如下:
优点 |
缺点 |
1.管理方便,逻辑明确,符合一般人思维习惯 2.易于管理,集中式服务器更能保证安全性 3.代码与文档一致性非常高 4.适合开发人数不多的项目开发,当然,用SVN来管理测试代码以及日常文档也就比较轻松 |
1.服务器压力太大,数据库容量暴增,于是也就需要大容量的存储资源 2.完全依赖SVN服务器,若出现服务器无法连接的情况,就不能提交,还原,对比等 3.不适合大规模开源开发(试想一下,如果大规模的客户端向服务器提交代码或文档将会是什么结果),不过集中管理方式有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理。 |
其实上面都是一些概念上的描述,真正要实际体会到这个工具的好与坏,优与劣,还需要真正的去操作。
SVN的几个关键词与图标
这一部分将对SVN工具的一些关键词和一些图标含义进行比较详细的说明,之后在使用中进行相关的对照,将会有更多的体会,这一版手册中涉及到的关键词属于最基本内容,在后续的版本更新中,将会出现更多的关于SVN关键词的介绍。
关键词 |
详解 |
版本库(repository) 这个主要针对服务器端的管控 |
版本库是SVN的核心部分,以典型的目录文件结构来保存文件信息。所有的客户端都需要连接到SVN版本库去读取、修改、更新这些文件。 直观上,版本库和一般的文件服务器没什么差别。它特殊的地方仅仅在于它会记录下每次修改,比如文件的更新,甚至是目录的删改。而用户默认对版本库进行的修改都是在最新的版本上进行的。但是,用户也可以查看之前所有的版本,看看是谁做了什么修改,或者由于出错,直接撤销到之前的某个版本 |
HEAD |
版本库中最新的(或者是“最年轻的”)版本,实际上,在第一次check out的时候,这就是默认方式 |
UPDATE |
更新本地副本,从服务器端“拉”数据 |
COMMIT |
提交本地修改到服务器,向服务器端“推”数据,这里有一点说明是必须的:都是原子的,要么所有不同文件的变更结束,要么所有变更都不发生 |
Checkout |
从版本库中取出相应的文件拷贝到本地磁盘的工作路径,拷贝到本机的文件都属于“副本”的范畴 |
Show Log |
检视历史,这里记录了所有提交的修改,允许检查文件或目录以及相关元数据的历史。每个版本附加在版本上的作者与日期信息和所有路径修改都能通过这种方式检视 |
Add |
增加本地文件到服务器(简单讲,就是在本地创建文件,之后将本地创建的文件上传至SVN服务器的指定目录,执行Add操作须要注意的是,本地创建文件一定是在本地SVN文件夹目录下) |
Diff |
差异比较,比较任意两个文件的差异,不管他们是否受版本控制。SVN只是把这两个文件传递给已经选择的比较差异程序,让它比较差异 |
Update to Revision |
版本回退,具体在操作的时候需要结合Log(检视历史),这样更加明确需要将版本退回到需要退回的时间点 |
Lock |
SVN 的锁定特性为两个主要目的服务: 1.顺序访问资源。允许用户得到一个排他的修改文件权。 2.辅助交流。通过要求用户对某个版本化对象串行工作,用户可以知道对象正在被别人修改。 |
Get Lock |
为防止可能出现多个用户同一时刻需要对文件进行修改操作,第一个用户可以将某文件进行加锁,之后再进行编辑操作,直至操作完毕 |
Release Lock |
对文件操作完成之后,将附在文件上的锁释放,以便下一用户操作,在进行公共文件操作的时候,须注意加锁之后一定要释放,否则后续将无法对文件进行操作 |
接下来是一些基本的图标含义说明,一旦在本地的SVN文件夹进行了相关操作,对应的文件夹图标也将发生改变