走向SVN

  个人项目走向了尾声(10.7-10.14)。下面就是集体项目,我们得到片刻休息之后便开工啦!那么第一个便是SVN了。

本人是把百度资料整理一下,图方便。详见请百度:http://baike.baidu.com/link?url=gaXFLG02-6mnv2z1pVHKBKQPzWDozGrL__I1DBjm82vPWdZqTJ88G01PPEk0i6Dh-Q0k3jNTPfGbP6jpp2TITa

一、那么SVN是什么呢?

  SVN是Subversion的简称,是一个开放源代码版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。【说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。】

二、运行方式

  svn服务器有2种运行方式: 独立服务器和借助 apache运行。两种方式各有利弊,用户可以自行选择。

三、数据存储

  svn存储版本数据也有2种方式: BDB(一种 事务安全型表类型)和 FSFS(一种不需要数据库的 存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

四、工作流程

  集中式管理的工作流程如下图:

集中式代码管理的核心是 服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:

开始新一天的工作:

  1、从服务器下载项目组最新代码。

  2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。

  3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。

五、优缺点

1 存储类型格式

CVS是个基于RCS文件的 版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。

SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面, 数据存储由此变得不透明。

2 速度

CVS比较慢。

整体而言,由于架构实现的不同, SVN的确比CVS快很多。在网络上它只传输很少的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储( 完全备份所有的工作文件)。

3 标志&分支

SVN采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。对分支而言:分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。

4 元数据

CVS只允许存储文件。

SVN允许一个文件有任意多的可命名属性,功能十分完全。

5 文件类型

CVS最初是为文本文件存储而设计的。因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。

SVN会关心所有的文件类型,不需要你来手工操作。

6 回滚

CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。

SVN不允许递交后回滚。建议把版本 库里好的状态版本加到末尾,覆盖掉损坏的版本。而损坏的版本无论如何也是会存在数据库里的。(SVN的滚回操作实际上是merge操作)

7 事务

CVS中的“零或一”事务原则根本没有实现。如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。这样这些文件将在两阶段中被检入。SVN的确支持“零或一”事务原则,这是SVN的一大优势。

六、安全性

SVN站在更高层次上对安全产品,从系统和控制的角度进行了"有机"和"无隙"的整合。

SVN是一个安全 虚拟网络系统,它将系统整体的信息安全功能均衡合理地分布在不同的子系统中,使各子系统的功能得到最大限度的发挥,子系统之间互相补充,系统整体性能大于各子系统功能之和,用均衡互补的原则解决了"木桶原理"的问题。

SVN能在跨接 InternetIntranetExtranet间的网络所有端点实现全面的安全,而且还能提供基于企业策略的信息管理机制以充分有效地利用有限的带宽。SVN可以满足各种企业VPN的要求,通过为公司内部网络、远程和移动用户、分支机构和合作伙伴提供基于Internet的安全连接。所以,我们可以将SVN看成是VPN、 防火墙、基于企业策略的信息管理软件集成在一起的Internet安全的综合解决方案。在这样一个网络系统中,所有互联网服务器端和客户端都是安全的,并有一个信息管理机制以不断地通过这个外部网络环境动态地分析及满足客户的特定带宽需求。SVN提供了基于网络实现的eBusiness 应用的安全服务,它包含:

对多种应用进行全面的安全认证;

支持多种认证及 PKI

功能强大并对用户透明的通讯加密;

面向用户的集中 安全策略管理;

统一跨接Internet、Intranet、Extranet的通讯。

七、与vss

1. 支持重命名,这对 Java 开发来说非常重要

为了得到更好的代码,开发中需要经常进行重构,重构就经常涉及到文件的重构名,而重命名 VSS中是不被支持的。

2. 开发的时候不一定要锁定。

一方面导致重构不方便,另一方面,不能离线开发,使用 SVN就不同,可以带回家继续开发,回来后,提交就行了。

3. 多平台。

可以支持多个平台下的操作

4. 更好的客户端支持。

Eclipse 中的 VSS Plugin 不如它的 SVN Plugin 好用。一个在 Windows 下用的 SVN客户端TortoiseSVN 也比VSS 的客户端好用(VSS 只有微软提供的一个 GUI 客户端)。

5. 更好地与外围工具集成。

各种各样的外围工具(主要是服务器端),满足多种需要。如果有需要,也可以自己写插件或管理脚本,开放的架构,允许我们这样做。

6. 方便。

一个例子:部署应用的时候,以前的做法是找出一个项目中修改过的文件,更新到服务器上去,可以在服务器上执行 svn export 命令,把代码库中的最新版本导出,完成部署(也可以替换回老版本)。

7. 速度与稳定性看起来都不错。

学习它的管理、它的工作方式,是值得的。而 VSS是一个已经被逐渐抛弃的软件。如果时间不是多得没处用,那么就把时间花在最值得花的东西上面。

缺点

1、服务器压力太大,数据库容量暴增。

2、如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。

3、不适合 开源开发(开发人数非常非常多,但是 Google app engine就是用svn的)。但是一般 集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

优点

1、管理方便,逻辑明确,符合一般人思维习惯

2、易于管理,集中式服务器更能保证安全性。

3、代码一致性非常高。

4、适合开发人数不多的项目开发。

5、大部分 软件配置管理的大学教材都是使用svn和 vss


八、体系结构

带有 防火墙VPN网关,它是一个将防火墙和 VPN技术紧密结合的 网关产品;

SVN安全远程客户端软件包,一个功能强大的VPN客户端软件,支持台式机用户、 远程用户和移动用户,具有集中化管理的 个人防火墙功能和VPN用户的安全认证功能;

SVN证书管理模块,一个用于SVN的完整PKI解决方案,它将完善的CA和 LDAP目录服务器技术集成在一起;

SVN硬件加密卡,可以通过硬件技术实现功能强大的各种算法以提高VPN的速度和性能;

SVN智能带宽管理模块,一个基于企业策略的带宽管理解决方案,可以智能地管理有限的带宽资源,以确保用于企业重要应用的VPN性能可靠;

SVN 冗余管理模块,通过冗余网关 集群和 防火墙VPN内的SVN冗余模块,对执行重要任务的VPN和防火墙应用在出现故障时实现无缝切换。

自动地址转换模块,一个自动管理IP地址和命名的解决方案,通过提供IP地址服务的跟踪和集中化管理,确保可靠地控制地址分配和提高TCP/IP管理效率

SVN安全服务器软件包,专门保护单个应用服务器安全的VPN网关软件,它可以保护进行敏感操作的服务器免受攻击和未授权的访问,使客户端建立与服务器间的 安全认证和支持交换加密数据的连接;

SVN安全客户端软件包,它将基于状态检测的 防火墙和基于IPSec的VPN客户端软件集成在客户端机器上,通过提供集中管理的 个人防火墙和对所有企业VPN用户的安全认证,增强客户端机器的安全性。它与 SVN安全远程客户端软件功能相比,增强了客户端的安全功能,如访问控制和安全初始化控制等。

 
原文地址:https://www.cnblogs.com/wangzn/p/5967421.html