注意:遇到任何问题,先检查下是不是防火墙的问题!!!
【本文根据 Virgil 提供的教程整理,】作为另一篇文章Win7下搭建SVN服务器端及客户端(图文教程)的补充
准备条件:
Apache(xampp):http://www.apachefriends.org/zh_cn/xampp-windows.html#1787(注意下载exe版本,因为简单)
SVN服务器(Subversion):http://sourceforge.net/projects/win32svn/
SVN客户端(TortoiseSVN):http://tortoisesvn.net/downloads.html
SVN 中文语言包:http://tortoisesvn.net/downloads.html
花生壳(外网SVN使用):http://www.oray.com/peanuthull/download.php
补充:
1,64位的系统,32位和64位的SVN皆可使用,未发现兼容问题
2,32位的win8未经测试,不过应该不会有问题
整体步骤:
1, 安装Apache服务器、SVN服务器和客户端
2, 配置Apache服务器使其能够正常工作
3, 配置SVN服务器并关联到Apache
4, 设置权限
5, 外网设置
其中需要注意的是3和4,3关联到Apache需要细心,4设置权限是SVN工作的根本
详细步骤:
重要前提:
由于经常需要经常用到管理员权限,尤其是命令行,如果你的登陆用户名不是:Administrator,而是你自己设定的用户名。有一下两种操作供选择:
1, 在控制面板关闭UAC
2, 提升CMD的权限,方法为:在C:\windows\system32\cmd.exe,将cmd建立一个快捷方式,每次运行的时候,都要右键,以管理员身份运行。
这里我推荐操作2,UAC的存在对于系统来说大大提高了安全性,不建议关闭。以下每次用到CMD,都是执行了操作2,请知晓
一,安装
1, 下载Apache和SVN客户端、服务端、语言包后,一路安装即可,但是要注意,Apache的安装目录xampp要放在无特殊字符的目录下,基于这个原因,建议统一安装在C盘根目录,不要安装在ProgramFiles的目录里,以下所有目录以假设你安装在了C盘根目录
2,设置SVN语言为中文,方便操作
二,配置Apache
1, 打开C:/xampp/apache/conf/httpd.conf,找到下面两个字段,并修改
#Listen 80
Listen 8080
#ServerName localhost:80
ServerName localhost:8080
这里改了监听端口,因为太多的软件会占用80端口,会导致apache服务无法启动,ServerName暂时用localhost,以便测试
2,不要使用xampp这个来管理服务(没有特殊原因,个人推荐),用windows自带的服务管理器来管理。Win+R,输入services.msc,找到Apache,设置自动启动,并启动服务。
3,测试:打开浏览器,输入:localhost:8080,如果弹出来Xampp的界面,说明Apache配置成功, 如果不成功,
(1), 请检查是否开启了杀毒软件或防火墙,全部关闭再次测试
(2), 请查看8080端口是否被占用,查看方法:cmd,输入:netstat–a –o 查看对应端口
三,配置SVN并关联Apache
1, 建立仓库,找个地方,新建一个文件夹,进去,右键,建立版本仓库,假设你的目录是:E:\work
2, 将SVN做成自动启动服务,管理员运行cmd,cd到Subversion的bin目录,执行如下命令:
sc create subversion_service binpath= "\"c:\subversion\bin\svnserve.exe\"--service -r E:\work " displayname= "Subversion Repository"depend= Tcpip start= auto
注意,等号后面都是有空格的,前面没有空格
3, 关联Apache:
在C:\Subversion\bin,复制如下四个文件:
mod_dav_svn.so
mod_authz_svn.so
intl3_svn.dll
libdb44.dll
到C:\xampp\apache\modules
其中,第四个文件的数字可能有不同,取决于版本号
4, 修改配置文件:
记事本打开C:\xampp\apache\conf\httpd.conf,
找到LoadModule dav_module modules/mod_dav.so,去掉#
并在其下面添加:
LoadModuledav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
这个是添加SVN的功能模组
5, 添加SVN的访问目录:还是C:\xampp\apache\conf\httpd.conf这个配置文件,在文件最后面,添加上
<Location/svn>
DAV svn
SVNPath E:\work
AuthTypeBasic
AuthName"Subversion repositories"
AuthUserFileF:\svnroot\passwords.auth
AuthzSVNAccessFileF:\svnroot\access.auth
Requirevalid-user
</Location>
注意严格按照这个格式来,下面介绍需要自行改为自己的地方:
SVNPath E:\work,这个是你的SVN版本库位置
AuthUserFile F:\svnroot\passwords.auth
AuthzSVNAccessFile F:\svnroot\access.auth
这两个是密码和权限获取的文件,请更改为你想存放的地方,并新建这两个文件
6, 测试:做了如上操作之后,打开浏览器,输入:localhost:8080/SVN,如果需要输入用户名密码,则说明成功了,下面进行权限的关键配置
四,设置权限
1, 打开E:\work\conf\svnserve.conf,这个是你的SVN工程的权限说明文件,找到anon-access = read
auth-access = write
这两个行,去掉#,开启读和写的权限
2, 打开你刚才新建的access.auth,写上:
[groups]
[/]
harry =rw
你只需要把harry更改为你的用户名即可,这里是将这个用户名更改为r读和w写的权限
[groups]下面为空的意思是,现在不分组(开发啊、测试啊等等)
[/]表示SVN所有的工程目录,这个用户都有这个权限
3, 开始设置密码,密码设置分为两种,加密和不加密
A, 不加密,最简单的,直接打开之前新建的passwords.auth,
输入:harry=123,这是将harry这个用户的密码设为123,
B, 加密,推荐加密方法:cd到apache的bin目录, C:\xampp\apache\bin\
htpasswd -c F:\svnroot\passwords.auth harry,svnroot的这个目录是你之前的设置的目录,harry是你要设的用户名
如果你要设置第二个及之后的用户的密码,在设置其它用户密码的时候,把-c这个参数去掉,只在第一次设置密码的时候需要加上-c这个参数
之后,你会在passwords.auth这个目录看到你的用户名的密文密码
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这一步经常出现的的问题:
svn认证失败的问题:
Commit failed (details follow):
Unable to connect to a repository at URL'svn://localhost'
认证失败
conf文件下的svnserve.conf,将
# password-db =passwd
除去行前的#和空格,注意必须去掉空格
www.2cto.com
passwd
[users]
harry = harryssecret
sally =sallyssecret
除去行前的#和空格,注意必须去掉空格.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
测试:任意地方右键,打开版本库浏览器,输入地址:http://localhost:8080/svn,输入你设置的用户名和密码,能够进入成功,看到文件,那么,恭喜你,成功了。
至此,局域网的服务器搭建成功了,局域网其它用户访问的话,输入的把localhost替换成你的IP即可。如果需要外网访问你的服务器,继续向下看。
五,外网设置
这里提供的方案是花生壳
1, Google搜索花生壳,下载安装,注册,登陆,好了,你可以看到自己的域名,把上述设置里,所有的localhost,替换成的你申请到的域名即可
2, 配置路由器的映射,这个比较麻烦,有如下几种情况:
A, 普通的modem,拨号上网,非路由器的,就不需要设置了
B, Modem加路由器,modem拨号,然后你连的是路由器,这个好办,在路由器里设置转发规则,也就是所谓的虚拟主机,设置端口8080,填上你自己的局域网IP,好了,映射完成
C, 电信光纤,这个麻烦很多,因为这个是modem和路由器一体的,我尝试用超级密码登陆,设置转发规则,但是失败了。一般的光线modem后面有的用户名和密码权限很低,超级密码:用户名是admin,密码有的是gpon,有的是epon,我在里面设置了转发规则之后,没有生效,就放弃了,接下来开始繁琐的设置
1,找到设置PPOE上网的地方,删除这条
2,新建模式:桥接,名字就用默认就好了,选择端口,有四个,除了端口2,其它都可以
3,路由器插上你刚才选的端口,登陆路由器,wan参数里填上上网账号和密码,
4,路由器里设置转发规则,填上你此时的局域网IP。
设置完成,浏览器输入试一下。
六,权限的高级设置
在D:\svnroot目录下建立两个svn1和svn2,多版本仓库的方式。
修改打开Apache安装目录下conf目录中的httpd.conf文件,将光标移到文件的最末端
加入的代码修改如下:
<Location/svn>
DAV svn
#这里将SVNPath修改为SVNParentPath,当前目录svnroot,为父目录,仓库svn1和svn2在这个父目录下
SVNParentPathD:/svnroot
AuthTypeBasic
AuthName"Subversion Repository"
AuthUserFile"F:/svnroot/passwords.auth"
AuthzSVNAccessFile"F:/svnroot/access.auth"
Requirevalid-user
</Location>
* 认证用户文件passwords.auth不需要做任何修改
* 认证权限文件access.auth修改如下:
[groups]
dev1 =tom,cat #开发用户组1
dev2 =hello #开发用户组2
[svn1:/]
* = r
[svn1:/aaa]
@dev1 =rw #设定dev1组成员对svn1仓库下的aaa目录有读和写权限
@dev2= #设定dev2组成员对svn1仓库下的aaa目录没有任何权限
[svn1:/bbb]
@dev1= #设定dev1组成员对svn1仓库下的bbb目录没有任何权限
@dev2 =rw #设定dev2组成员对svn1仓库下的bbb目录有读和写权限
[svn1:/ccc]
@dev1= #设定dev1组成员对svn1仓库下的ccc目录没有任何权限
@dev2= #设定dev2组成员对svn1仓库下的ccc目录没有任何权限
[svn2:/]
@dev1= #设定dev1组成员对svn2仓库没有任何权限
@dev2= #设定dev2组成员对svn2仓库没有任何权限
到此我们为不同用户分组对不同仓库定义了权限,大家可以使用不同的用户
进行browse/import/checkout试验
仓库1访问路径为http://localhost/svn/svn1
仓库2访问路径为http://localhost/svn/svn2
对父目录http://localhost/svn/,任何用户都没有任何访问权限
最后,如果需要更高级的管理方式,直接google