2013年初次接触PHP网站快速开发(3):版本控制SVN与CSS、CVS

 本文资料摘自百度百科资料,仅为参考学习所用,将常用版本控制区别表达出来,言辞笨拙请见谅。

 源代码版本控制机制是现代软件开发中必不可少的管理机制之一,通常借助版本控制软件即Source CodeManagement(SCM) systems或者Version Control systems来实现。版本控制在软件开发中的重要作用如下: 1)作为代码仓库有效的管理软件开发中各个不同版本的源代码和文档,占用空间小并且方便各个版本代码和文档的获取。 2)对开发小组中对源代码的访问进行有效的协调(不同的版本控制软件采取不同的协调策略)。 常用的版本控制软件有Clearcase, CVS(Concurrent Versions System),SVN, PVCS和Microsoft公司的Visual SourceSafe (VSS)。

下面对Windows平台开发最常用的进行介绍

SVN与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是一个已经被逐渐抛弃的软件。如果时间不是多得没处用,那么就把时间花在最值得花的东西上面。

SVN与CVS(copy-modify-merge流程)优缺点

所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了。不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了。更有甚者,它甚至让人重回CVS。CVS和SVN的比较类似于比较C++和Java。很明显CVS和SVN都远比SourceSafe强大的多,如同C++和Java比Basic强大的多。CVS代表了几乎代码控制系统的所有功能项,尽管有时他的实现并不很方便。SVN修正并添加了一些CVS并不拥有功能。例如,创建标志和分支dubious,你在编辑文件时其他人不会有任何通知。SVN并不是CVS的替代品,只是个不同的系统,类似于CVS。它有些特有的功能,足以作为采用它的理由。这些功能使他更适合于开发环境,例如对PowerBuilder。

下面你可以找到两者的相对优势、劣势。

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(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。

  svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊。

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

工作流程

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

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

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

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

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

缺点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安全远程客户端软件功能相比,增强了客户端的安全功能,如访问控制和安全初始化控制等。SVN站在更高层次上对安全产品,从系统和控制的角度进行了"有机"和"无隙"的整合。SVN是一个安全虚拟网络系统,它将系统整体的信息安全功能均衡合理地分布在不同的子系统中,使各子系统的功能得到最大限度的发挥,子系统之间互相补充,系统整体性能大于各子系统功能之和,用均衡互补的原则解决了"木桶原理"的问题。SVN能在跨接Internet,Intranet,Extranet间的网络所有端点实现全面的安全,而且还能提供基于企业策略的信息管理机制以充分有效地利用有限的带宽。SVN可以满足各种企业VPN的要求,通过为公司内部网络、远程和移动用户、分支机构和合作伙伴提供基于Internet的安全连接。所以,我们可以将SVN看成是VPN、防火墙、基于企业策略的信息管理软件集成在一起的Internet安全的综合解决方案。在这样一个网络系统中,所有互联网服务器端和客户端都是安全的,并有一个信息管理机制以不断地通过这个外部网络环境动态地分析及满足客户的特定带宽需求。SVN提供了基于网络实现的eBusiness 应用的安全服务,它包含:对多种应用进行全面的安全认证;支持多种认证及PKI;功能强大并对用户透明的通讯加密;面向用户的集中安全策略管理;统一跨接Internet、Intranet、Extranet的通讯。

 

VSS (Volume Shadow copy Service, 卷映射拷贝服务),最初是在Windows Server 2003 SP1中引入的存储技术。它通过在卷管理模块上加入快照功能,在此基础上就可以创建基于时间点(Point-In-Time)的映像(Image),从而实现数据的快速备份和恢复,用户也无需害怕因无意删除数据而造成的困扰,这就是VSS的关键所在。由于VSS所表现的优良特性,因此在Microsoft最新的Vista操作系统中,也加入了该功能。
VSS能够让存储基础设备(比如磁盘、阵列)创建高保真的时间点映像,就是映射拷贝(Shadow Copy)。它可以在多卷、或者单个卷上创建映射拷贝,同时不会影响到系统性能。VSS通过协调业务应用软件、备份程序,以及存储硬件,从而达到创建高保真映射拷贝的能力。它可以应用到以下领域:A、 快速数据备份和恢复;B、 针对制定文件的恢复;C、 磁带备份、测试,以及数据挖掘方面;
由于Microsoft在OS中集成了VSS技术,它将各个处理功能模块化,并针对存储软硬件厂商提供相应的开发接口;开发商只需要关注自己的模块,根据需求设计相关的应用,从而减少了整体设计的难度。就笔者了解,不少软硬件存储公司就采用VSS技术来设计NAS,并以此为基础构建数据保护服务器
VSS整体框架包含了VSS核心模块、请求者(Requestor)、写入者(Writer),以及提供者(Provider)。

运行环境

Windows平台下使用VSS开发的典型环境是基于C/S架构的,即开发小组的每个开发者在各自的Windows平台下利用开发工具(比如VC)开发项目中的各个模块,而配有专门的服务器集中控制开发过程中的文档和代码。服务器和开发人员的客户机分别装有VSS的服务器客户端程序。
VSS使用过程中要遵循的是lock-modify-unlock流程而不是 copy-modify-merge流程(比如CVS),即开发人员首先将自己要修改源代码和文档从VSS服务器备份文件上checkout到本地同时锁定服务器上的源代码和文档(multi - checkout情况除外),修改完成后checkin到服务器上同时解除服务器上文件的锁定。服务器集中控制所有的源程序和文档。 
1) 项目(project),所谓的项目是一组存在VSS中的文件(任何类型),可以在项目中或是项目之间进行文件的添加、删除、编辑和共享。一个项目与操作系统的文件夹有很多的相似之处,但它更好地支持文件合并、历史和版本控制。所有的文件存在VSS数据库的项目中,开发组成员不能在VSS中的服务器主备份文件上工作(除了检查和版本比对等特殊情况外)而是VSS为每个成员在各自的工作目录(workfolder)下提供一个拷贝以供工作。尽管在没有工作目录的情况下也可以查看某个文件,但如要真正在VSS管理下工作,就必须要创建一个工作目录。
2) 工作目录(workfolder)是用户真正对项目文件进行调试修改的地方,当用户checkout文件时,VSS将就将文件拷贝到用户的工作目录下,当用户修改了该文件并将其checkin时,VSS再将它从用户的工作目录拷回到VSS 的数据库中。在用户作checkout时,VSS将会自动管理他的工作目录,诸如创建必要的子目录。而且工作目录可以随时创建或修改。
3) 版本跟踪。VSS提供版本控制和历史服务,而且老版本程序和文档能够被重新得到以便进行bug跟踪或其他目的。VSS用日期/时间戳记录文件是何时被checkout或是何时被修改的,它主要有三种方法来跟踪文件和项目的版本:版本号:这是由VSS维护的内部数码,用户对它没有控制权。每个文件和项目的每个版本都有一个版本号,这些版本号总是一个整数且是递增的。标签(label):这些是用户赋给某个项目或文件的某个版本的一个字符串,可以是任何格式的长度不超过31字符的字符串。推荐使用。日期/时间戳:它给出了一个文件何时最后被修改的信息,或者是一个文件何时被checkin。VSS同时支持 12小时和24小时的时间格式。

 CVS

(Concurrent Versions System)版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。Concurrent有并发的、协作的、一致的等含义。实际上CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS用Copy-Modify-Merge(拷贝、修改、合并)变化表支持对文件的同时访问和修改。它明确地将源文件的存储和用户的工作空间独立开来,并使其并行操作。CVS基于客户端/服务器的行为使其可容纳多个用户。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。所有重要的免费软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括GNOME、KDE、THE GIMP和Wine等。
posted @ 2013-04-23 16:26  梦里笑花  阅读(494)  评论(1编辑  收藏  举报