SVN管理

来源:互联网 发布:万方数据库 知网 编辑:程序博客网 时间:2024/06/06 06:38

一、Subversion介绍

Subversion是一个自由/开源的版本控制系统。Subversion允许你数据恢复到早期版本,或者是检查数据修改的历史。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。

Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据 可以促进团队协作。因为修改不再是单线进行,开发速度会更快。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件质量—如果出现不正 确的更改,只要撤销那一次更改操作即可。

某些版本控制系统本身也是软件配置管理(SCM)系统,这种系统经过精巧的设计,专门用来管理源代码树,并且具备许多与软件开发有关的特性—比如,对编程语言的支持,或者提供程序构建工具。不过Subversion并不是这样的系统。它是一个通用系统,可以管理任何类型的文件集。对你来说,这些文件这可能是源程序—而对别人,则可能是一个货物清单或者是数字电影。

 

Subversion是一个“集中式”的信息共享系统。版本库是Subversion的核心部分,是数据的中央仓库。版本库以典型的文件和目录结构形式文件系统树来保存信息。任意数量的客户端连接到Subversion版本库,读取、修改这些文件。客户端通过写数据将信息分享给其他人,通过读取数据获取别人共享的信息。下图展示了这种系统:

一个典型的客户/服务器系统 


这有什么意义吗?说了这么多,Subversion听起来和一般的文件服务器没什么不同。事实上,Subversion的版本库的确一种文件服务器,但不是“一般”的文件服务器。Subversion版本库的特别之处在于,它会记录每一次改变:每个文件的改变,甚至是目录树本身的改变,例如文件和目录的添加、删除和重新组织。

一般情况下,客户端从版本库中获取的数据是文件系统树中的最新数据。但是客户端也具备查看文件系统树以前任何一个状态的能力。举个例子,客户端有时会对一些历史性问题感兴趣,比如“上星期三时的目录结构是什么样的?”或者“谁最后一个修改了这个文件,都修改了什么?”这些都是版本控制系统的核心问题:设计用来记录和跟踪数据变化的系统。


Subversion的历史

早在2000年,CollabNet, Inc. (http://www.collab.net) 就开始寻找CVS替代产品的开发人员。CollabNet提供了一个名为CollabNet企业版(CEE)的协作软件套件。这个软件套件的一个组成部分 就是版本控制系统。尽管CEE在最初采用了CVS作为其版本控制系统,但是CVS的局限性从一开始就很明显,CollabNet知道,迟早要找到一个更好 的替代品。遗憾的是,CVS已经成为开源世界事实上的标准,很大程度上是因为没有更好的替代品,至少是没有可以自由使用的替代品。所以CollabNet决定从头编写一个新的版本控制系统,这个系统保留CVS的基本思想,但是要修正其中错误和不合理的特性。

2000年2月,他们联系到Open Source Development with CVS(Coriolis, 1999)的作者Karl Fogel,并且询问他是否希望为这个新项目工作。巧合的是,当时Karl正在与朋友Jim Blandy讨论设计一个新的版本控制系统。1995年时,他们两人曾经开办了一个提供CVS支持的公司Cyclic Software,尽管他们最终卖掉了公司,但还是天天使用CVS进行日常工作。使用CVS时的挫折促使Jim认真的思考如何管理版本化的数据,并且他当 时不仅使用了“Subversion”这个名字,并且已经完成了Subversion版本库的最 初设计。所以当CollabNet提出邀请的时候,Karl马上同意为这个项目工作,同时Jim也找到了他的雇主—Red Hat软件公司—允许他到这个项目工作,并且没有限定最终的期限。CollabNet雇佣了Karl和Ben Collins Sussman,详细设计工作从三月开始,在Behlendorf 、CollabNet、Jason Robbins和Greg Stein(当时是一个独立开发者,活跃在WebDAV/DeltaV系统规范制订工作中)恰到好处的激励下,Subversion很快吸引了许多活跃的 开发者,结果是许多对CVS有过失望经历的人很乐于为这个项目做些事情。

最初的设计小组设定了简单的开发目标。他们不想在版本控制方法学中开垦处女地,他们只是希望修正CVS。他们决定Subversion应符合CVS的特 性,并保留相同的开发模型,但不再重复CVS的一些显著缺陷。尽管Subversion并不需要成为CVS的完全替代品,但它应该与CVS保持足够的相似 性,以使CVS用户可以轻松的转移到Subversion上。

经过14个月的编码,2001年8月31日,Subversion能够“自己管理自己”了,开发者停止使用CVS保存Subversion的代码,而使用Subversion本身。

虽然CollabNet启动了这个项目,并且一直提供了大量的工作支持(它为一些全职的Subversion开发者提供薪水),但Subversion像 其它许多开源项目一样,被松散的、透明的规则管理着,这样的规则激励着知识界的精英们。CollabNet的版权许可证完全符合Debian的自由软件方 针。也就是说,任何人都可以根据自己的意愿自由的下载、修改和重新发布Subversion,不需要CollabNet或其他人的授权。


Subversion的特性

Subversion支持:

版本化的目录

在Subversion中,文件目录都是版本化的。

真实的版本历史

在Subversion中,可以对文件或目录进行增加、拷贝和改名操作,也解决了同名而无关的 文件之间的历史联系问题。

原子提交

一系列相关的更改,要么全部提交到版本库,要么一个也不提交。这样用户就可以将相关的更改组成一个逻辑整体,防止出现只有部分修改提交到版本库的情况。

版本化的元数据

每一个文件和目录都有自己的一组属性—键和它们的值。可以根据需要建立并存储任何键/值对。和文件本身的内容一样,属性也在版本控制之下。

可选的网络层

Subversion在版本库访问的实现上具有较高的抽象程度,利于人们实现新的网络访问机制。Subversion可以作为一个扩展模块嵌入到 Apache之中。这种方式在稳定性和交互性方面有很大的优势,可以直接使用服务器的成熟技术—认证、授权和传输压缩等。此外,Subversion自身 也实现了一个轻型的,可独立运行的服务器软件。这个服务器使用了一个自定义协议,可以轻松的用SSH封装。

一致的数据操作

Subversion用一个二进制差异算法描述文件的变化,对于文本(可读)和二进制(不可读)文件其操作方式是一致的。这两种类型的文件压缩存储在版本库中,而差异信息则在网络上双向传递。

高效的分支和标签操作

在Subversion中,分支与标签操作的开销与工程的大小无关。Subversion的分支和标签操作用只是一种类似于硬链接的机制拷贝整个工程。因而这些操作通常只会花费很少且相对固定的时间。

可修改性

Subversion没有历史负担,它以一系列优质的共享C程序库的方式实现,具有定义良好的API。这使得Subversion非常容易维护,和其它语言的互操作性很强。


Subversion的架构




 

图中的一端是保存所有版本数据的Subversion版本库,另一端是Subvesion的客户程序,管理着所有版本数据的本地影射(称为“工作拷贝”),在这两极之间是各种各样的版本库访问(RA)层,某些使用电脑网络通过网络服务器访问版本库,某些则绕过网络服务器直接访问版本库。

二、SVN服务端的安装

常用的Svn服务器为VisualSVN Server。

VisualSVN Server安装教程

双击VisualSVN Server安装文件,按步骤点击下一步安装即可,VisualSVN Server捆绑安装了Apache同时VisualSVN Server安装步骤中涉及了部分VisualSVN Server配置信息,我会在VisualSVN配置部分详细介绍,VisualSVN Server安装完毕后,即会跳出上图所示的VisualSVN配置界面。

VisualSVN Server配置教程
1、配置VisualSVN Server的访问地址

团队开发中使用VisualSVN,默认是以https://的方式访问VisualSVN服务器,即 https://计算机名/svn/

如果你想修改https的访问方式或者修改端口信息可以通过右键左侧VisualSVN Server (Local)图标->Properties,

可以配置VisualSVN Server的访问方式,比如Server Name,Server Port(默认443端口),use secure connect(https://)表示是以https方式还是以http方式访问。同时你也可以根据需要将VisualSVN Server绑定在固定几个ip地址上访问,进一步提升安全性。

2、配置VisualSVN Server用户/组/,并设置相应权限。

当以IE方式访问使用VisualSVN Server时,需要输入相应的用户名及密码,这是保证开发的安全性,在一个PHP开发团队中,每个人承担的角色不同,有的是管理员,有的是开发人员,有的是测试人员,这就需要合理设置不同的用户组,并分配权限。

新建用户:右键VisualSVN Server Users选项->新建->User后会出现创建用户的窗口,

注意:用户名和密码是区分大小写的。

新建用户组:右键Groups选项->新建->Group,界面与使用VisualSVN Server新建用户类似,只是多了增加(Add)用户组中用户的界面。

配置用户权限:使用VisualSVN Server可以针对不同项目库对不同用户分配不同的权限,也可以针对所有项目进行配置,比如我针对所有项目进行用户权限配置,只要右键左侧Repositories->所有任务->Mange Security。

默认权限为读写,不但可以针对用户组配置,也可以针对具体的单个用户进行权限配置,非常方便。

VisualSVN使用提示: 关于VisualSVN Server用户认证方面的配置,主要有两种形式,一种是使用VisualSVN自己创建用户组/用户名,另一种是VisualSVN使用当前 Windows系统中已设定的用户组/用户名,从安全角度,个人还是建议使用VisualSVN创建。关于VisualSVN Server认证方式的配置,可以通过右键左侧VisualSVN Server图标->Properties->Authentication进行配置。

3、创建SVN Repositories(源码库)

右键Repositories->新建->repository,输入repository name即可。

 

三、SVN客户端的安装

Windows上最常用的SVN客户端是TortoiseSVN(http://tortoisesvn.net/)。TortoiseSVN的安装也非常简单,双击安装文件之后,按照提示就可以安装完成。

在Windows资源管理器的文件窗口中单击右键,会出现如下窗口。可以看到SVN相关菜单。


 获取版本库

点击“SVN Checkout”菜单,出现Checkout窗口:

填写在服务器端创建的版本库路径和本地存储路径,就可以获取版本库。

如果在本地建立版本库,也可以使用如下方式参与:


四、一些操作:

 1、添加文件到版本库

选择文件后右键”add” 

Add之后,表示文件已经受到SVN管理,但是没有提交到版本库。

2、右键”SVN Commit”,提交文件到版本库。 

输入提交信息,并选择需要提交的文件。

3、查看文件历史

右键”Show log”

查看文件版本差异

在历史界面中,选择需要比较的版本

4、从版本库中更新内容,右击后,选择"SVN update"



五、遇到问题

在过程中,出现not connect 问题


问题原因是enable proxy server勾选了。改为不勾选状态后,正常。



0 0