svn入门续-2

使用高版本系统

测试使用subversion1.7.8,下载Setup-Subversion-1.7.8.msi,运行安装

1、安装目录d:\Program Files\Subversion\,完成安装后,将D:\Program Files\Subversion\bin加入path环境变量

2、在d盘创建目录D:\svn\repository,命令行运行svnadmin create d:\svn\repository,没有什么提示信息,表明创建版本库成功。

3、启动svn服务器,svnserve -d -r d:\svn\repository

4、测试导入项目,d盘建立test\client目录,其下建立test.txt文件和child子目录,执行svn import svn://localhost,出现

D:\test>svn import svn://localhost
svn: E205007: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者
使用 --message (-m) 或 --file (-F) 选项
svn: E205007: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中
也没有 “editor-cmd” 选项

D:\test>

使用svn import svn://localhost -F c:\log.txt,提示认证失败,找到D:\svn\repository\conf下的svnserve.conf,修改

anon-access =read
anon-access = write

但是依然提示验证失败,而在1.4.4版本时,修改就可用,说明在1.7.8后,匿名用户无论如何是没有写权限的。查看一下1.7.8的svnserve.conf,有这样一段注释:
 The sample settings below are the defaults and specifythatanonymous usershave read-only access to the repository, while authenticated users have read and write access to the repository.

5、打开passwors-db = passwd,然后在passwd中添加hello/hello123用户,再次执行import,这时提示输入用户及口令,正确输入后导入成功。

6、subversion与apache2.2整合

安装httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

修改conf目录下的httpd.conf   开启
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

增加
LoadModule dav_svn_module "D:\Program Files\Subversion\bin\mod_dav_svn.so"
LoadModule authz_svn_module "D:\Program Files\Subversion\bin\mod_authz_svn.so"

文件尾增加:

<Location /svn>
DAV svn
SVNPath d:/svn/repository
</Location>

保存重启,成功,显示apache/2.2.22(win32) SVN/1.7.8  DAV/2,集成成功,在IE中输入http://localhost/svn。访问成功

7、apache权限设置

在</Location>前增加

AuthType Basic
AuthName "Subversion Repository"
AuthUserFile E:/passwd/passwords
Require valid-user

然后使用htpasswd创建用户

htpasswd -c d:\passwd\passwords hello
htpasswd d:\passwd\passwords world

重新启动apache,再次访问http://localhost/svn,弹出认证对话框,需要输入用户、密码才能访问

8、使用策略文件,对用户,对项目进行访问的精确控制:

首先修改SVNPath为SVNParentPath,SVNParentPath表示以后建立版本库的父目录,这时在访问http://localhost/svn,输入用户密码也不能访问了,按照前章的作法,在d:\svn\repository目录下建立subsvn,使用svnadmin create d:\svn\repository\subsvn,系统提示:
C:\>svnadmin create d:\svn\repository\subsvn
svnadmin: E165002: “D:\svn\repository\subsvn” 是当前根为 “D:\svn\repository” 的版本库的子目录,也就是说,在svn1.7里面,不能在库中再建子库。

将SVNParentPath设为d:\svn,在此目录下建立subsvn,使用svnadmin create d:\svn\subsvn,创建库成功,访问http://localhost/svn/subsvn,可以成功。然后在d:\svn下建立svna目录,在此目录下在建立svn1目录,使用svnadmin create d:\svn\svna\svn1,可以创建成功,但是,却无法通过http://localhost/svn/svna/svn1来访问。

总结:看来,在apache2.2+svn1.7版本下,版本库只能创建在版本库的父目录底下,不能在库中在建子库,也不能在父目录底下第二层及以下目录建库。

修改httpd.conf

<Location /svn>
DAV svn
SVNParentPath d:/svn
AuthzSVNAccessFile d:/passwd/policy    #增加一行
AuthType basic
AuthName "版本库服务器"
AuthUserFile d:/passwd/passwords
Require valid-user
</Location>

policy内容:

[groups]
developers = hello,world
tester = microsoft
[helloworld:/]
@developers = rw
@tester =
[subsvn:/]
@tester = rw
@developers = rw
[svnb:/]
@developers =
@tester = rw

可以实现不同用户对不同项目的不同访问权限。

9、还没解决的问题

怎样实现老版本的可以一下浏览多个子库的功能,比如我输入http://localhost/svn,就能显示其下的所有子库subsvn、helloworld、svnb等等。

我的一个apache2.2已经集成了php,同时假设了discuz站点,如何在集成svn

你可能感兴趣的:(svn入门续-2)