SVN实战

理论篇:

SVNSubversion)是一个开放源代码的版本控制系统,市场占有率名列前茅。

相较于RCSCVS,它采用了分支管理系统。常用于多个人共同开发同一个项目,共用资源的目的。

       svn服务器有2种运行方式:独立服务器apacheserver运行。

       svn存储版本数据也有2种方式:

BDB(一种事务安全型表类型)

FSFS(一种不需要数据库的存储系统)

因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

 

SVN原理图:

 

SVNCVS的优缺点:

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

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

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

支持多种认证及PKI

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

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

统一跨接InternetIntranetExtranet的通讯。

 

SVN架构:

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

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

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

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

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

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

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

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

 

实战篇:

环境:

Linux

CentOS6.4

svn1.6

web目录:/www/html

 

实验:

1、 安装svn:推荐实验yum安装,避免不必要的麻烦。

#yum -y installsubversion

 

2、 准备工作:

创建项目目录:

#mkdir /svn

生成项目文件:

#svnadmin create/svn/data

 

3、 配置配置文件:authz(权限);passwd(密钥);svnserve.conf()、post-commit(钩子

(1)先配置主配置文件:

#vim /svn/data/conf/svnserve.conf

anon-access = none     #匿名用户没有任何权限。

auth-access = write

password-db = passwd

authz-db = authz

(!!!注意:该文件格式极其严格,配置项要左边无空格,等号两边留空格,建议通用于svn所有配置文件)

(2)配置密钥文件:

# vim /svn/data/conf/passwd

[users]

user_name = user_passwd

(3)配置权限文件:

# vim /svn/data/conf/authz

[svn:/]

svn = rw

@g_web = rw

@g_dev = *

* = r

 

authz文件说明:(每个[ ]表示一个项目)

[svn:/ ] 里面表示项目名项目节点分割。/ 表示从根节点开始。

@ 表示组名组权限用等号分割。

没有@开头的权限赋值就是赋值给指定用户。

* 表示除了指定权限以外的所有人的默认权限。

权限有”继承”,子目录继承父目录的权限。

该目录里的用户和组都在passwd文件中配置过的。

可以设置多个项目。

 

(4)配置钩子文件:(五种钩子)
start-commit
它在提交事务产生前已运行,通常用来判定一个用户是否有权提交。版本库传给该程序两个参数:到版本库的路径,和要进行提交的用户名。如果程序返回一个非零值,会在事务产生前停止该提交操作。如果钩子程序要在stderr中写入数据,它将排队送至客户端。
pre-commit:
在事务完成提交之前运行,通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个bug追踪的ticket号,或者是要求日志信息不为空)而不允许的提交。版本库传递两个参数到程序:版本库的路径和正在提交的事务名称,如果程序返回非零值,提交会失败,事务也会删除。如果钩子程序在stderr中写入了数据,也会传递到客户端。
post-commit:(常用的钩子)
它在事务完成后运行,创建一个新的修订版本。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者作为版本库的备份。版本库传给程序两个参数:到版本库的路径和被创建的新的修订版本号。退出程序会被忽略。
pre-revprop-change:
因为Subversion的修订版本属性不是版本化的,对这类属性的修改(例如提交日志属性 svn:log)将会永久覆盖以前的属性值。因为数据在此可能丢失,所以Subversion提供了这种钩子(及与之对应的post-revprop- change),因此版本库管理员可用一些外部方法记录变化。作为对丢失未版本化属性数据的防范,Subversion客户端不能远程修改修订版本属性,除非为你的版本库实现这个钩子。
这个钩子在对版本库进行这种修改时才会运行,版本库给钩子传递四个参数:到版本库的路径,要修改属性的修订版本,经过认证的用户名和属性自身的名字。
post-revprop-change:
我们在前面提到过,这个钩子与pre-revprop-change对应。事实上,因为多疑的原因,只有存在pre-revprop-change时这个脚本才会执行。当这两个钩子都存在时,post-revprop-change在修订版本属性被改变之后运行,通常用来发送包含新属性的email。版本库传递四个参数给该钩子:到版本库的路径,属性存在的修订版本,经过校验的产生变化的用户名,和属性自身的名字。

其他:

Subversion的分发版本包括了一些访问控制脚本(在Subversion源文件目录树的tools/hook-scripts目录),可以用来被pre-commit调用来实现精密的写访问控制。另一个选择是使用Apachehttpd模块mod_authz_svn,可以对单个目录进行读写访问控制(见每目录访问控制一节)。在未来的Subversion版本中,我们计划直接在文件系统中实现访问控制列表(ACL)。

Subversion分发版本中包括mailer.pycommit-email.pl脚本(存于Subversion源代码树中的 tools/hook-scripts/目录中)可以用来发送描述给定提交的email(并且或只是追加到一个日志文件),这个mail包含变化的路径清单,提交的日志信息、日期和作者以及修改文件的GNU区别样式输出。

Subversion提供的另一个有用的工具是hot-backup.py脚本(在Subversion源代码树中的tools/backup/目录中)。这个脚本可以为Subversion版本库进行热备份(Berkeley DB数据库后端支持的一种特性),可以制作版本库每次提交的快照作为归档和紧急情况的备份。

Subversion分发版本中包含propchange-email.pl脚本(在Subversion源代码树中的tools/hook- scripts/目录中),可以用来发送修订版本属性修改细节的email(并且或只是追加到一个日志文件)。这个email包含修订版本和发生变化的属性名,作出修改的用户和新属性值。

 

       #cp/svn/data/hooks/post-commit.tmpl /svn/data/hooks/post-commit

       #vim/svn/data/hooks/post-commit

       WEBPATH=”/www/html”

SVN=/usr/bin/svn

export LANG=zh_CN.UTF-8

$SVN update $WENPATH --username user_name --passworduser_passwd

给予执行权限

       #chmod755 /svn/data/hooks/post-commit

 

4、 启动svn:

#svnserver -d -r /svn/data

 

5、 同步svn版本库:

#svn co svn://127.0.0.1/svn /www/html --username user_name--password user_passwd

 

6、 把本地的web代码上传到svn项目版本库:

#svn add /www/html

#svn commit

 

7、 每次在客户端提交代码完成后钩子会自动把代码同步到/www/html/下。

 

SVN常用命令:

svn add file|dir  添加文件或整个目录

svn checkout  获取svn代码

svn commit   提交本地修改代码

svn status    查看本地修改代码情况:修改的或本地独有的文件详细信息

?:不在svn的控制中;  M:内容被修改;C:发生冲突;

svn merge    合并svn和本地代码

svn revert   撤销本地修改代码

svn resolve   合并冲突代码

svn help [command]   查看svn帮助,或特定命令帮助

svn cat 显示特定版本的某文件内容。

svn list 显示一个目录或某一版本存在的文件列表。

svn log 显示svn 的版本log,含作者、日期、路径等。

svn diff 显示特定修改的行级详细信息。

 

最后提一下客户端保存密码的问题,因为是明文保存的,所以安全存在问题,这个问题大家自行解决,本文只用于个人实验,不能应用于生产环境。Thanks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值