最近接手的项目有点多了,太多的代码记不住了,而且前一个项目还没开发完,马上就终止开发下个项目(:-( 成了老板赚钱的工具了),一下子有点手忙脚乱。所以打算搭建svn进行版本控制。
网上的教程五花八门,没点apache配置基础的估计就会被耍的团团转了。看了n篇文章,最终自己总结搭建起SVN,感叹网上的文章还真是…
下面的文章主要针对:“apache2.2 + svn1.61 + 虚拟目录 + 多项目版本 + 多用户” 的配置
我选用的svn服务器版本
http://subversion.tigris.org/getting.html#windows
CollabNet的zip 1.61版本 :http://subversion.tigris.org/files/documents/15/45600/svn-win32-1.6.1.zip
解压至subversion目录 eg:d:subversion
apache以mod方式加载,所以复制bin下面的两个mod文件到apache的modules文件夹下。然后把bin所有的dll文件复制到apache的bin目录下,有的会覆盖,看版本的新旧而定了。(注:网上也有把subversion的bin目录写入环境变量path里,如果按照以上步骤做,这部算是重复的;如果写环境变量,记得重启,windows系统重启后会自动加载环境变量指向目录中的dll与exe路径,有点系统基础的人会明白。)
接下来,建立svn目录 eg :d:svn
因为是zip配置,没有采用exe安装,所以要启动subversion的服务。打开cmd,输入
sc create SVNServer binPath= "D:Subversionbinsvnserve.exe --service -r d:svnt" depend= Tcpip start= auto
解释 sc为windows下有关服务的命令,create为建立,SVNServer为服务,下面的很好懂不解释了。(注:格式 例如binPath=这里,等号前面无空格,后面要有一个空格。)删除服务命令“sc delete SVNServer”。
服务是有了,但是apache不认,因为没有配置。本文是讲利用apache的webDav来搭载svn。所以接下来配置apache的httpd.conf文件
找到apache的模块加载代码区
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
去掉前面的#号注释,有人说不用去掉第二个,我查了查apache的文档,是这么解释的:“mod_dav-允许Apache提供DAV协议支持,mod_dav_fs-为
<a href="http://www.phpchina.com/manual/apache/mod/mod_dav.html">mod_dav</a>
访问服务器上的文件系统提供支持”所以应该去掉,否则协议支持了,不能以文件形式访问。
刚才不是复制两个svn的mod到apache的modules目录下么,所以要加上两句:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
当然也可以不复制,采用绝对路径形式eg d:subviesionbin…省略
配置了这么多,还记不记得,d:svn目录下是空的,如果这样访问,那就是404错误或者其他的,所以要建立版本库,利用subversion的bin目录下的svnadmin.exe建立,当然也在cmd下面(或者安装TortoiseSVN:svn客户端,右键建立版本库),命令cd 进入bin目录,“svnadmin create d:svn”就可以了。
最后就是svn的apache配置信息了。
如果采用内网模式
简单设置,就是httpd.conf中加上
<Location /svn>
DAV svn
SVNPath "d:/svn"
</Location>
引号加不加均可,重启apache目录,访问127.0.0.1/svn仅能看到你想要的结果了。如果是服务器输入ip 61.*.*.*/svn也可以。
下面讲搭载虚拟目录配置,为的是,建立独立域名svn.***.com
apache支持虚拟目录,这里不写了,网上有很多。去掉上面的<Location>配置,加上如下代码:
解释一会下面有,这里要注意的是,在确定对访问用户的权限控制之前,你必须规划好是对整个资源库中的所有项目还是单独的某一个项目进行统一的身份验证,选用了“SVNPath”而没有用“SVNParentPath”主要与下面的权限配置文件有关。还有建立passwd(用户密码文件)与svnaccessfile(用户权限文件)。
(注:
# SVNParentPath指向svn资源库的上一级目录
# SVNPath指向svn资源库目录
# 使用SVNParentPath或SVNPath根据相应需求
)
接下来建立用户,因为是基于apache访问svn,所以dsvn下的conf文件里的passwd文件就无用了(注:这是svn单独建立服务器时用的),需要apachebin目录下的htpasswd文件,进入cmd进入apachebin目录下,敲入
htpasswd -c d:subversionpasswd user1
然后提示输入两遍密码,默认md5加密,创建成功。(注:如再追加用户要“-c”去掉,否则会覆盖前面所建立的用户信息)
最后是svnaccessfile的权限配置文件,我没有建立用户组,直接用户访问权限配置。配置如下:
[projone:/]
user1 = rw
user2 = r
[projtwo:/]
user1 = rw
user2 = rw
下面重启apache就可以了。
如果想多项目,多用户,直接虚拟目录配置里面添加“<Location /projtwo>…<Location /projthree>…”就可以了,多权限如上权限配置。
对了,利用TortoiseSVN访问时,会根据你svn的目录层数要求多次输入密码,直接记住密码就OK了。
下面是配置的相关解释:
<Location /svn>
意味着可以通过像这样的URL(http://MyServer/svn)来访问Subversion版本库
DAV svn
告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块
SVNListParentPath on
在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的版本库
SVNParentPath D:SVN
告诉Subversion在目录D:SVN下寻找版本库
AuthType Basic
启用基本的验证,比如用户名/密码对
AuthName "Subversion repositories"
当一个验证对话框弹出时,告诉用户这个验证是用来做什么的
AuthUserFile D:passwd
指定D:passwd用为密码文件用来验证用户的用户名及密码
AuthzSVNAccessFile D:svnaccessfile
指定D:svnaccessfile来限定各个用户或组在版本库中目录的访问权限
Require valid-user
限定用户只有输入正确的用户名及密码后才能访问这个路径