回复 引用 |
环境:Windows 2003 172.25.0.248
Windows XP 172.25.23.46
Subversion 1.4.5
TortoiseSVN 1.4.5
Apache 2.0.61
1、安装
Subversion,TortoiseSVN,Apache安装都非常简单,Apache的安装目录在C:/Program Files/Apache Group/Apache2,TortoiseSVN安装在Windows XP上,作为客户端访问服务器,需要重新启动,客户端服务器都安装subversion和TortoiseSVN,这样可以互相测试
2 、subversion没有项目概念,它是创建一个档案库,在下面创建目录,目录相当于CVS对应的项目
创建档案库
svnadmin create c:/svn
3.svnserve方式运行
subversion服务器有两种方式运行,自带的svnserve方式,另外一种作为apache的扩展模块,使用apache来作为服务器,先介绍简单的svnserve方式
1)启动
svnserve -d -r c:/svn
远程客户机访问
svn list svn://172.25.0.248
这样可以看到档案库下面的目录,当然现在是空的
-r 是root的意思,是用来指定根目录,如果不指定,是当前目录,如果使用
svnserve -d 启动,svn list svn://172.25.0.248 会出现错误,
svn list svn://172.25.0.248/svn 这样才能正确访问
2)权限
权限定义放在档案库根目录下的conf下,共三个文件
svnserve.conf
passwd
authz
先观察一下svnserve.conf,这里有四行是需要管理的
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
# realm = My First Repository
定义如下
anon-access=read定义匿名用户的权限,默认是read,可以改成write,none,即写,或者没有任何权限,一般设置为none,避免匿名访问
auth-access = write,这个也可以设置为read,none,不过不大可能这么设置
password-db=passwd 指定了用户名密码文件,可以在passwd文件中设置用户名密码
realm = My First Repository 这一行不要做修改
修改svnserve.conf文件,如下
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = dev-test
要去掉行首的空格,切记
此时在客户段匿名访问,就会提示密码
svn list svn://172.25.0.248 #服务器端svnserve -d -r c:/svn
我们在passwd文件中增加用户名密码,密码格式是 用户名=密码
修改如下
[users]
test=test
hello=world
现在就可以输入test/test,hello/world来登陆系统
3)常用操作
用命令操作太麻烦了,用TortoiseSVN来操作,第一次操作会提示用户名密码,用上面设置的输入既可
subversion没有项目概念,只是管理目录
导入项目
选定文件夹,右键,TortoiseSVN,Import,将选择的文件导入,一个文件夹就导入了subversion
导出:右键,SVN Checkout
增加:右键,TortoiseSVN,add
提交:右键,SVN commit
更新:右键,SVN Update
4)权限进阶
假设情况如下开发人员stone,john,rose,测试人员jone,smith,brown,分为两个组dev,test,目录有两个dev,test,可以互相读取对方的目录,但是只能写自己的目录,all组包括test,hello,可以读取和写入所有目录
修改svnserve.conf,取消认证用户的统一权限,在authz中定义
#anon-access = none
#auth-access = write
password-db = passwd
realm = dev-test
修改passwd文件
[users]
test=test
hello=world
stone=stone
john=john
rose=rose
jone=jone
smith=smith
brown=brown
修改authz文件
[groups]
dev=john,stone,rose
test=jone,smith,brown
all=test,hello
[/]
@dev=r
@test=r
@all=rw
[/test]
@test=rw
[/dev]
@dev=rw
这样就可以限制访问权限,all组的用户拥有任何权限,dev组的只能读取所有的目录,但只能写dev目录,test也只能读取test目录,测试命令如下
svn import a svn://172.25.0.248/a --username test --password test
svn import b svn://172.25.0.248/c --username john --password john
svn import c svn://172.25.0.248/c --username jone --password jone
可以看出只有test用户可以在根目录增加数据,通过
svn list svn://172.25.0.248 --username test --password test
svn list svn://172.25.0.248 --username john --password john
svn list svn://172.25.0.248 --username jone --password jone
可以看出列表权限所有用户都有
类似的可以测试dev,test目录的相应权限
这样的权限设置,大多都够用了,如果需要多个档案库,可以将密码文件password-db,authz-db,指向一个文件,同时修改realm为同一个值,这个时候应该把多个档案库放在一个父目录下,如
svnadmin create d:/svn/dev
svnadmin create d:/svn/test
svnadmin create d:/svn/doc
启动
svnserve -d -r d:/svn
访问
svn://172.25.0.248/dev,svn://172.25.0.248/test,svn://172.25.0.248/doc
目录权限要加上档案目录
[dev:/]
[test:/]
5)可以把svnserve包装为服务,如下
sc create svnserve binpath= "/"C:/Program Files/Subversion/bin/svnserve.exe/" --service --root c:/svn" displayname= "Subversion" depend= tcpip start= auto
net start Subversion
就可以正常访问了,系统重新启动,subversion也会重新启动
4、Apache 方式运行
Apache安装比较简单,安装路径为C:/Program Files/Apache Group/Apache2,修改默认端口为803
1)拷贝C:/Program Files/Subversion/bin下的mod_authz_svn.so,mod_dav_svn.so到C:/Program Files/Apache Group/Apache2/modules
2)修改C:/Program Files/Apache Group/Apache2/conf/http.conf,增加
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
3)创建档案库
svnadmin create e:/svn/test
4)配置权限
修改httpd.conf,增加
<Location /test>
DAV svn
SVNPath e:/svn/test
</Location>
重新启动Apache,就可以访问了,svn list http://172.25.0.248:803/test
如果要配置多个版本库,可以使用父路径,如下
<Location /svn>
DAV svn
SVNParentPath e:/svn
</Location>
访问路径为http://172.25.0.248:803/svn/test
增加一个档案库,svnadmin create e:/svn/admin,访问路径为http://172.25.0.248/svn/dev
这样配置无法匿名访问,好在我们可以配置权限
现在增加用户验证
创建密码文件
set path=%path%;C:/Program Files/Apache Group/Apache2/bin
E:/svn>htpasswd -c e:/svn/svn_apache_passwd.txt john
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user john
E:/svn>htpasswd e:/svn/svn_apache_passwd.txt jone
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user jone
创建了两个用户john/john,jone/jone,继续创建stone/stone,hello/world
修改httpd.conf
<Location /svn>
DAV svn
SVNParentPath e:/svn
AuthType Basic
AuthName "开发测试Subversion"
AuthUserFile e:/svn/svb_apache_passwd.txt
Require valid-user
</Location>
这样可以通过ToroiseSVN或者svn命令来操作,和svnserve协议是一样的
svn import x http://172.25.0.248/test/x -m x
5)权限进阶
修改http.conf,
<Location /svn>
DAV svn
SVNParentPath e:/svn
AuthzSVNAccessFile e:/svn/svn_apache_access.txt #增加目录权限管理
AuthType Basic
AuthName "开发测试Subversion"
AuthUserFile e:/svn/svn_apache_passwd.txt
Satisfy Any #允许匿名访问
Require valid-user
</Location>
创建svn_apache_access.txt
[dev:/]
john = rw
stone = rw
jone = r
hello = r
[test:/]
john = r
stone = r
jone = rw
hello = rw
这样控制了john,stone可以读写dev档案库,读test档案库,jone,hello可以读写test档案库,读dev档案库
重新启动apache
#成功
svn import test/t http://172.25.0.248:803/svn/dev/t --username stone --password stone -m x
#收到错误
svn import test/t http://172.25.0.248:803/svn/test/t --username stone --password stone -m x
#成功
svn import test/a http://172.25.0.248:803/svn/test/a --username hello --password world -m x
#收到错误
svn import test/a http://172.25.0.248:803/svn/dev/a --username hello --password world -m x
Apache模式是比较好用的,可以通过浏览器来浏览subversion版本库,可以看到目录结构,或者还能简单的文件内容
5、现在来说,一个简单的subversion就可以配置和使用了,因为我是在windows上配置的,所以SSL的功能比较麻烦,等以后有空再研究吧,现在安全问题没有解决,无法部署到应用环境,这是下一步的事情,慢慢来。