Pages

Tuesday, 29 November 2011

使用SVN进行版本控制

使用SVN进行版本控制。Subversion 你知道是什么吗?本文将以Windows平台为例,结合自己的经历,说下版本控制环境的搭建和使用。说明:本文将使用Apache+Subversion+TortoiseSVN进行构建。

一、SVN简介

Subversion, 一种功能强大的开源版本控制工具,其不仅可以管理程序源代码,也可以应用于其他协作管理数据的工作,在服务器端,如将其与Apache 的 HTTP 服务器相结合后,可实现更多的高级管理功能和安全特性,现在Subversion已基本取代 CVS,成为新一代的开源版本控制工具。举例:一个项目共花100天完成,到最后一天时,发现全错了,我想恢复到第50天某个时间的状态。怎么办?你每一 天每次改动都有备份?

二、安装前准备

2.1、Apache HTTP Serve

官方下载地址:http://httpd.apache.org,目前最新版本为Apache 2.2.10,我下载的是apache_2.2.10-win32-x86-openssl-0.9.8i.msi

2.2、Subversion(SVN)

官方下载地址:http://subversion.tigris.org/project_packages.html, 最新版本为Subversion 1.5.4 下载时要注意下载和Apache2.2.x版本对应的,我下载的是 svn-win32-1.5.4.zip(二进制文件),你也可以下载Setup-Subversion-1.5.3.msi(Windows安装文件, 一路“下一步”可以省去配置环境变量的麻烦)。

2.3、TortoiseSVN

TortoiseSVN是Subversion的Windows客户端,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。简单的说就是Subversion可视化操作工具。官方下载地址:http://tortoisesvn.tigris.org/ ,我下载的是TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.mis

2.4、LanguagePack

TortoiseSVN 中文语言包,需注意到是要和客户端程序版本相同。这里是LanguagePack_1.5.5.14361-win32-zh_CN.msi语言包

三、安装步骤

3.1、安装 Apache HTTP Server

安装非常简单,不明白可以参考本站文章。要注意的是,电脑如果已经安装了IIS,要么暂停IIS服务,要么把IIS的端口改为非80端口。

3.2、安装 Subversion

如果你前面下载的是Windows安装文件,那么你一路下一步就好了。
如果你下载的是zip压缩包,那么请将压缩包解压,比如我解压到C:\Program Files\Subversion。那么在“系统属性“-"高级“-"环境变量“-"系统变量PACH“的值后面加上;C:\Program Files\Subversion\bin就行了。

3.3、SVN与Apache结合

首先将Subversion安装目 录bin下面的两个文件:mod_authz_svn.so和mod_dav_svn.so复制到Apache安装目录modules目录下,然后将 Subversion安装目录bin下面的libdb44.dll复制到Apache安装目录bin目录下 。
在httpd.conf中查找下面2行代码,并将其前面的"#“号去掉
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
在所有LoadModule后面添加下面代码,重启Apache后状态栏变成Apache/2.2.10 SVN1.4.6 DAV/2
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

四、SVN配置

4.1、设定SVN文件库路径

要设定 URL 路径与文件库实际路径的对应关系。对应的方式有两种,分别是 SVNPath(适合指定单个文件库的路径) 与SVNParentPath(多个文件库的路径)。完成后,将代码加入httpd.conf中。

4.2、SVNPath 语法:

DAV svn SVNPath d:/svn/poject
其中 "/svn/poject" 就是用户端存取特定文件库的 URI,SVNPath 后面指定的路径则是文件库的绝对路径。
注意 Location 标签后面的 /svn/poject的第一个斜线不可少!

4.3、SVNParentPath语法:

DAV svn SVNParentPath d:/svn
这表示可以让任何人都可以透过 http://myserver/svn/<文件库名称> 的方式,存取位于 d:/svn这个目录以下的所有文件库。也就是说,这个设定动作只需要一次,如果使用 SVNPath,那么你必须为各个文件库分别指定对应的路径。

五、使用方法

5.1、建立版本库(Repository)

方法一.在提示符窗口中输入svnadmin create D:\svn\poject,路径填你喜欢的就可以了。
方 法二.使用TortoiseSVN图形化完成这一步,在目录D:\svn\poject下右键->TortoiseSVN->Create Repository here..., 然后可以选择版本库模式, 这里使用默认即可, 然后就自动创建了一系列目录和文件。

5.2、导入项目

5.2.1、使用命令行操作,在命令行中CD到项目文件夹下后,执行下面命令,其中M后面的是项目信息,可以任意填写。
svn import "http://localhost/svn/poject" -m "Initial repository layout"
5.2.2、使用TortoiseSVN图形化
右键->TortoiseSVN->Import...
URL of repository输入"http://localhost/svn/poject"

六、权限控制

Sebversion 提供了多种验证使用者身份的方式。

6.1、Basic(基本)访问控制的配置

修改 httpd.conf 的 ,设定如下:
DAV svn # 指定多个版本库路径 SVNParentPath d:\svn # 认证的名称,显示于登录提示框 AuthName "欢迎登录" # 策略文件,指定用户或组在版本库中目录的访问权限 AuthzSVNAccessFile "d:\svn\authz" # 表示只有经过认证的用户才可以访问 Require valid-user #表示允许匿名访问 Satisfy Any # 认证的类型,即使用基本验证 AuthType Basic # 存储用户登录信息的文件 AuthUserFile "d:\svn\passwd"

6.2、用Apache的htpasswd指令生成用户名和密码

htpasswd -c d:\svn\passwd username
-c 的作用是创建用户文件passwordfile 下次就不用-c参数,而是用-m参数,因为文件passwordfile已经创建。
username是用户名
htpasswd -m d:/svn/passwd username

6.3、配置文件库访问权限文件

假设为projectA和projectB都建立了相应的版本库,可以在d:\svn\authz文件中
[projectA:/]
username1 = rw
[projectA:/]
username2 = r
[projectA:/trunk]
username1 =
username2 = rw
[projectB:/]
* = r
[projectB:/trunk]
username1 =
另外,你还可以在d:\svn\authz中定义一组用户,然后按组进行权限配置#各组成员名单
[groups]
groups1 = username1
groups2 = username2
#所以文件库都可以匿名访问,但只有groups1组用户有读写权限
[/]
* = r
@groups1 = rw
#在文件库projectA下groups2组的用户也有读写权限
[/projectA]
groups2 = rw
#禁止所有用户访问/private文件库
[/private]
* =

七、结语

上文只是简单讲解SVN的搭建和使用,属个人学习笔记。事实上,普通用户是完全可以使用现有的SVN源代码托管服务,比如国内的http://svn.w18.nethttp://www.svnhost.cn/,还有更专业的http://code.google.com/

No comments:

Post a Comment