登峰之道---简约而不简单
分享阳光,分享快乐
 

这几天一直在找一个能与vs.net2003相结合的源代码管理工具,几乎试用过所有的大部分工具,难者难,易则简,今天准备安装subversion试试

1.  转到http://httpd.apache.org/download.cgi

2.  下载 apache_2.0.53-win32-x86-no_ssl.msi

3.  转到http://subversion.tigris.org  下载svn-1.1.3-setup.exe

4.  转到http://tortoisesvn.tigris.org/下载TortoiseSVN-1.1.3-UNICODE_svn-1.1.3.msi

安装

1.先安装Apache,如果你的IIS已经占用80端口,则在安装的时间请使用8080口,不过这个版本好像是自动选择,为安全起见,还是自己手动选择一下,避免冲突。假如我们选择8080端口,安装完后请打开http://127.0.0.1:8080如果安装成功的话,您将看到欢迎页。否则请检查安装是否正确.

 

2.接着安装svn-1.1.3-setup.exe,这个版本可以选择是否要在apache的模块中自动配置,请选择自动配置。这样的话就不用手动修改配置文件了。

不然的话要进行以下手动配置 

1.      <Subversion_root>/httpd/目录下的 mod_dav_svn.so mod_authz_svn.so Copy <Apache_root>/modules/ 目录下。

2.      <Subversion_root>/bin/ 目录下的 libdb42.dlllibeay32.dll、以及 ssleay32.dll Copy <Apache_root> 底下的 bin modules文件夹。

3.      接着用记事本打开Apache HTTP Server httpd.conf(在 <Apache_root>/conf/ 目录下),找到 LoadModule 指令,先找到以下兩行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so

把前面的 '#' 字元刪除,然后把下面几行文字加到这群 LoadModule 指令的后面:LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

4.      重新启动 Apache HTTP Server

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


3.设置subversion的仓库路径 

l         设置URL路径 SVNPath

其语法是:

   <Location /svn/repos_name>

    DAV svn

    SVNPath /absolute/path/to/repository

</Location>

其中 "/svn/repos_name" 就是客户端存取特定档案库的 URIUniform Resource Indentifier),SVNPath 后面指定的路径则是档案库的绝对路径,假设我们的档案库实际存放的路径是 d:/svn/MyProject,并且希望客户端使用 "http://myserver/svn/myprj" URL 来存取档案库,那么要加入 httpd.conf 的内容就是:

<Location /svn/myprj>

    DAV svn

    SVNPath d:/svn/MyProject

</Location>

注意 Location 标签后面的 /svn/myprj 的第一个斜线不可少!

现在要设定 URL 路径与档案库实体路径的对应关系。对应的方式有两种,分别是与

 

l         设置仓库物理路径 SVNParentPath 

如果你的档案库都集中放在某个目录之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定档案库的根路径,例如:

<Location /svn>

    DAV svn

    SVNParentPath d:/svn

</Location>

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

以上两种设定方式都可以,方便起见,这里我用 SVNParentPath 来统一指定所有档案库的父层 URL 路径。

<Location> 的设定加到 Apache HTTP Server httpd.conf 檔尾就行了。

接着便可以开始建立档案库。

 

三 建立档案库

假设我们要把所有的档案库都放在 d:/svn 目录下,现在要建立一个测试用的档案库,名称叫做 repository,指令为:

md d:/svn

svnadmin create d:/svn/repository

命令执行完后,检查看看 d:/svn/repository 目录底下产生了哪些目录和档案。

一般有如下目录

这时候你已经建立了一个档案库,你可以先在本机用浏览器测试一下,网址输入 http://localhost:8080/svn/repository/,看看能不能看到档案库的内容.

 

四 存入仓库

我们先测试一下这仓库是否成功,先建立以下目录结构

c:

cd temp

md ProjectA

md ProjectA/trunk

md ProjectA/branches

md ProjectA/tags

svn import . http://localhost/svn/repository -m "Initial repository layout"

 

提示

本文在执行 svn 命令时,都是使用 http 协议的方式,这样我们可以确知 Subversion Apache HTTP Server 的设定无误,其它人就可以透过 Internet 存取档案库。当然你也可以用其它的协议,例如:file:///,如果使用 file 协议,最后一行指令就变成:

svn import . file:///d:/svn/repository -m "Initial repository layout"

项目的目录结构

这里补充说明一下 ProjectA 的目录结构。在 ProjectA 项目的根目录下建立的 trunkbranches、和 tags 这三个目录是有特别意义的,它们的作用分别是:

trunk 目录用来存份目前项目正在进行开发的程序档案和文件(又称为主线,即 mainline);

branches 用来存放主线的各个仍在发展中的分支;

tags 则用来存放已经不再变动的分支,也就是其中的档案不会再修改了。

这是 Subverion 官方手册建议的目录结构安排方式,你可以自己决定要不要用这种配置方式,详细说明请参考官方手册的第五章,子标题为 "Choosing a Repository Layout"

补充

Subversion具有两种服务模式,一个是作为Apache的模块,另一个是自定义协议的Subserve服务。
作为Apache的模块,客户端可以通过WebDAV/DeltaV协议访问Repository,而使用Subserve则使用
Subversion
的自定义协议。
下表是两种服务模式的比较:

功能

Apache + mod_dav_sub

Svnserve

验证方式

基于HTTPSX.509LDAPNTLM或其他Apache支持的验证

CRAM-MD5或者SSH

用户帐户管理

私有的用户文件

私有的用户文件或已有的系统帐户

授权管理

blanket read/write access或单一目录的访问控制

blanket read/write access

加密

可选的SSL

可选的SSH隧道

交互性

可通过支持WebDAV的客户端访问

无交互性

Web访问

有限的内置支持,或通过第三方的工具,例如ViewCVS

通过第三方的支持,如ViewCVS

速度

稍慢

稍快

初始安装

稍复杂

相当简单

 

使用 Windows 网域账户验证

照着前面的步骤做,你会发现存取档案库时都不用输入账号密码,这是因为我们之前的设定没有启用身分验证的功能。但是我们通常不希望所有人都能任意存取你的档案库,免得重要资产外泄,或者数据被破坏,因此了解如何加入身分验证也是必要的。

Serversion 提供了多种验证使用者身份的方式,这里只介绍 Windows 身分验证的方式,这种方式很适合用在开发团队成员都在局域网络内的情况。请依下列步骤进行:

取得 SSPI 模块,下载网址为 http://tortoisesvn.tigris.org/mod_auth_sspi.zip

zip 里面的 mod_auth_sspi.so 解压缩到 <Apache_root>\modules 目录下。

把下面这行加入到 Apache httpd.conf 里面:

LoadModule sspi_auth_module modules/mod_auth_sspi.so

注意上面加入的这行一定要放在下面这行的前面:

LoadModule auth_module modules/mod_auth.so

修改 httpd.conf <Location> 设定如下:

<Location /svn>

    DAV svn

    SVNParentPath d:/svn

    AuthType SSPI

    AuthName "Subversion 档案库"

    Require valid-user

    SSPIAuth On

    SSPIAuthoritative On

    SSPIDomain <domaincontroller>

    SSPIOfferBasic On

</Location>

其中 <domaincontroller> 就是你的 Windows 域控制器的计算机名称(例如:WIN2KDC),注意两边的括号 <> 不用保留。如果你的环境没有域控制器,就维持原来的 <domaincontroller> 就行了。在我的环境下,我发现即使有域控制器,但是这里不去设定它,还是能够正常的验证使用者身分。
 

重新启动 Apache

七 采用文件方式进行身份验证

 

此处也可以用mysql,passwd文件,LDAP等其他任何Apache支持的验证方式。

 

此处我采用文件方式,首先建立一个保存密码的文件,如果不需要对密码加密,可增加-p参数生成plain text

%APACHE_HOME%\bin\htpasswd –c -p d:\passwd\passwords user1 12345执行后会提示您输入密码,这样就在文件passwords里生成一个用户名为user1的用户,

生成的文件内容如下:

   #格式username:password

user1:123456

 例子:

Repository存放在D:\repository下,有两个repository: test and xtest

每个repostory 的结构相同:

       根:01.txt

              02.txt

        folder1-: 11.txt

       12.txt

folder 2-: 21.txt

   22.txt

对目录12作不同的读写权限控制

Basic Authentication

修改文件:

Httpd.conf:

#Basic authentication

<Location /repository>

              DAV svn

              SVNParentPath d:/repository

              AuthzSVNAccessFile d:/repository/accessfile                

           Require valid-user

              AuthType Basic

              AuthName "身份验证"

              AuthUserFile d:/repository/passwd                  

</Location>


Apachehtpasswd生成用户名和密码,

Htpasswd –c passwd username

第二次不用 –c

生成的用户名和密码在passwd中:

0:$apr1$Vu5.....$XZ/csz/2YKoPNKpb88O5p0

1:$apr1$vu5.....$I1VwMJ7JtRmpmJjVUlT4h1

2:$apr1$Dv5.....$vf2MTg/p0mY.WcFhx7wET1

3:$apr1$Tv5.....$gfk4AiP49h0JjKN8BuJdB.

 

AuthzSVNAccessFile控制每个目录的读写权限

[test:/]

1 = r

2 = r

3 = r

[test:/1]

1 = rw

[test:/2]

2 = rw

 

在客户端,用http://server/repository/test可以访问。也可以直接进入子目录访问:http://server/repository/test/1http://server/repository/test/2。系统会要求进行认证。例如用户1对目录1有读写权限,可以commit修改,但对目录2所作的修改就不能commit

SSPI认证。

按上一种方式,用户更换一次密码,就必须修改一次密码文件。用SSPI认证则可以没有这个问题。

Httpd.conf文件:

#SSPI authentication

<Location /repository>

              DAV svn

              SVNParentPath d:/repository

              AuthzSVNAccessFile d:/repository/accessfilesspi               

              Require valid-user

              AuthType SSPI

           AuthName "Subversion repositories"

                     # SSPI settings

               SSPIAuth On

               SSPIAuthoritative On

               # point to domaincontroller

               SSPIDomain domain.com.cn

              SSPIOfferBasic On

</Location>

控制文件AuthzSVNAccessFile要作相应的修改:

[test:/]

domain\user1 = r

domain\administrator = r

[test:/1]

domain\user1 = rw

[test:/2]

domain\user1 =

domain\administrator = rw

tortoiseSVN使用时,会提示认证,填写用户名和密码即可。

 

如果要按照Group的方式来控制权限,可同时建立一个groups文件,内容如下:

 

   #格式:GroupName: username1 username2

 

    svngroup: user1 user2  

httpd.conf中的/svn处增加权限控制部分:

 

 

   <Location /svn>

 

    DAV svn

 

    # 指向SVN RepositoryROOT

 

    SVNPath d:/svnrepo

 

   

 

    AuthType Basic

 

    AuthName "Subversion Repository"

 

    AuthUserFile d:/passwd/passwords

 

    AuthGroupFile d:/passwd/groups

 

    Require group svngroup

 

    </Location>

 

 

重起服务器,浏览http://localhost/svn,出现安全对话框,输入用户名密码即可成功。

 

 

 

 

 

 

 

 

 

 

posted on 2005-05-24 09:43  登峰  阅读(537)  评论(0编辑  收藏  举报