最近boss给我分了个师弟,终于结束了孤军奋战的日子,虽然师弟也不怎么会,但有总比没有好,现在两个人也算个小团队了,代码拷来拷去很麻烦,我就试着自己搭建个SVN服务器,搭建过程中遇到了一些问题,记录在这里备忘。
SVN(即Subversion)服务器端软件原始版本就叫Subversion,最新版本为Subversion1.6.9,如果采用原始版本,则网络应用层协议使用的是SNV独有的snv协议,在客户端软件中(例如:TortoiseSVN)就可以使用类似svn://localhost/project这样的地址来访问服务器。SVN也有很多衍生版本,这些版本集成了web服务器,这样使得安装和配置比较容易,并且可以在浏览器中访问SVN服务器,有代表性的两个是:VisualSVN和CollabNet Subversion,前者服务器端是免费的,客户端可以集成在Visual Studio中,是收费的(当然你也可以采用免费的TortoiseSVN)。后者是开源软件,理所当然是免费的。它们均集成了Apache Web服务器。下面主要讲述CollabNet Subversion的安装与配置。
1.CollabNet Subversion的安装
1、安装
* Subversion1.5版本的安装包自带了Apache2.2.8,所以无需额外安装Apache服务器
* 一路默认安装,如果需要修改仓库根目录或者Apache2.2.8端口可以自行修改为自己的信息,Apache默认端口为80,Subversion默认仓库存储路径为C:/svn_repository。
安装的过程中会自动将Subversion和Apache注册成服务,安装完成后重启一下电脑,运行services.msc查看服务,可以看到 “Apache2.2”和“Subversion Server”两个服务已经自动启动,如果不想让他们自动启动,可以修改为手动启动。
注:安装结束时没有提示重启系统,但重启之前Apache服务无法启动。
* 安装好后进入安装目录C:/Program Files/CollabNet Subversion Server,里面有一个httpd目录,这里面就是Apache服务器。
进入httpd下的bin目录,可以看到Apache服务器的各个程序
双击“ApacheMonitor.exe”打开Apache控制台,可以看到控制台的状态栏有如下内容:
Apache/2.2.8 (Win32) DAV/2 SVN/1.5.0
这说明Apache与Subversion在安装的过程中已经整合成功。
2、配置用户和权限
注:下面用的用户配置文件passwords.auth和权限配置文件access.auth的生成、配置及使用方式,在我的另一篇文章 “Apache2.2.9+Subversion1.4.6(for Apache2.2.X)在windows下的配置与权限设置”中有详细的介绍,这里就不再赘述。
* 进入安装目录下的httpd目录中的conf目录,如:
C:/Program Files/CollabNet Subversion Server/httpd/conf
打开httpd.conf文件,先看看文件最后面,已经自动为我们配置好了仓库的信息如下:
<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
</Location>
在这里我们先加入,用户配置,代码如下:
<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "C:/svn_repository/passwords.auth"
Require valid-user
</Location>
加入那四行新的信息后,重新启动Apache服务器,一切正常,这是可通过浏览器输入http://localhost/svn测试,会提示输入用户名、密码,用SVN客户端软件同样可以测试得到相同的结果。
下面是本文的主要内容,及权限配置的注意事项。
我们再在代码中加入权限配置的代码AuthzSVNAccessFile "C:/svn_repository/access.auth"
修改后的代码如下:
<Location /svn>
DAV svn
SVNParentPath C:/svn_repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "C:/svn_repository/passwords.auth"
AuthzSVNAccessFile "C:/svn_repository/access.auth"
Require valid-user
</Location>
此时重启Apache服务器,发现无法启动,提示“The requested operation has failed!”
这是我们需要再次修改httpd.conf配置文件,加入mod_authz_svn.so的加载项。
找到配置文件的116行(推荐使用UtralEdit或EditPlus编辑工具,不要一行一行的数哦),115和116行的代码如下:
115 LoadModule dav_module modules/mod_dav.so
116 LoadModule dav_svn_module modules/mod_dav_svn.so
其中116行中的mod_dav_svn.so文件就是以前我们安装Subversion1.4.6和Apache时,由Subversion
的lib目录拷贝到Apache的modules目录的,并在Apache的httpd.conf下新加入的那行代码。
再找到84行的代码,会发现和115行的代码一样,只是多了一个#号,表示这一行被注释了,115行的作用就是使这行代码重新生效,这就是以前取消注释的那行代码。
84 #LoadModule dav_module modules/mod_dav.so
如果装过Subversion以前的版本,应该记得当时需要拷贝两个文件到Apache的modules目录下,一个
是上面说过的mod_dav_svn.so,另一个就是mod_authz_svn.so。在Subversion1.5的安装目录下的 Apache目录httpd的modules中已经包含了mod_authz_svn.so文件,所以无需拷贝,只需要加入一行加载代码即可。
再次回到116行的位置,在他的下面加入如下一行代码,这行代码就成为了117行:
LoadModule authz_svn_module modules/mod_authz_svn.so
此时我们再保存配置文件,重启Apache服务器,发现又可以正常的启动了。
到此,我们完成了Subversion1.5的安装与默认配置工作,可以在实际的开发中使用Subversion1.5了。
2.CollabNet Subversion的配置
1、建立版本库(本文以在D:/盘下操作为例)
* 在Windows开始菜单的运行中执行cmd打开命令窗口,然后转到D:/根目录
* 在D:/根目录下执行D:/mkdir svnroot建立子目录svnroot,再转入svnroot目录下
* 在D:/svnroot目录下首先执行D:/svnroot/mkdir svn1建立子目录svn1,在进入svn1中,在建立三个子文件夹aaa,bbb和ccc,建好的目录结构如下:
C:/svnroot/svn1/aaa
/bbb
/ccc
* 然后执行svnserve create D:/svnroot/svn1建立仓库svn1
2、配置单仓库的用户权限
* 再次打开Apache安装目录下conf目录中的httpd.conf文件,将光标移到问文件的最末端加入如下代码:
<Location /svn>
#这里指定了仓库的访问路径,即http://localhost/svn
DAV svn
#指定仓库在硬盘上的实际位置
SVNPath D:/svnroot/svn1
#认真方式为基本方式
AuthType Basic
#认证窗口的标题
AuthName "Subversion Repository"
#认证用户配置文件实际位置
AuthUserFile "D:/svnroot/passwords.auth"
#认证权限配置文件实际位置
AuthzSVNAccessFile "D:/svnroot/access.auth"
#设定为需要进行认证
Require valid-user
</Location>
* 接下来我们创建认证所需的两个文件:用户文件和权限文件
到D:/svnroot下建立文件passwords.auth和access.auth(可以用记事本创建后修改文件名)
* 配置认证用户文件passwords.auth,内容如下:
tom:tom
cat:cat
hello:world
在这里密码都没有加密,如果需要设置密码加密,可以用Apache安装目录下bin目录中的htpasswd.exe程序生成,具体生成方法如下:
首先要将这个目录配置到环境变量的path中,我的路径是
C:/Program Files/Apache Software Foundation/Apache2.2/bin
然后打开命令窗口,在命令行中使用如下命令
C:/htpasswd -c D:/svnroot/passwords.auth tom
回车后会提示输入密码,输入tom,再回车会提示输入确认密码,再次输入tom就可以了
命令行中的参数-c表示创建一个文件,第一次运行创建好了,再添加别的用户的时候就
不要再使用这个参数了,如我再添加cat和hello用户
C:/htpasswd D:/svnroot/passwords.auth cat
C:/htpasswd D:/svnroot/passwords.auth hello
这样建立的用户密码默认使用的MD5加密,你打开文件以后看到的可能就是如下格式:
tom:7Z/80Al6$WTqVrBgshc/Bxi6YYkUga1$apr1$
cat:kNrG459T$qfAZ7MpgpFcdd2xp25gST1$apr1$
到此我们就添加好了三个用户tom,cat和hello,他们的密码分别为tom,cat,world
* 配置认证权限文件access.auth
直接在D:/svnroot下建立access.auth文件即可,然后填入如下内容
[groups]
dev1 = tom,cat #开发用户组1
dev2 = hello #开发用户组2
[/]
* = r #设定所有用户对根目录有读权限,即浏览权限
[/aaa]
@dev1 = rw #设定dev1组成员对aaa目录有读和写权限
@dev2 = #设定dev2组成员对aaa目录没有任何权限
[/bbb]
@dev1 = #设定dev1组成员对bbb目录没有任何权限
@dev2 = rw #设定dev2组成员对bbb目录有读和写权限
[/ccc]
@dev1 = #设定dev1组成员对ccc目录没有任何权限
@dev2= #设定dev2组成员对ccc目录没有任何权限
到此我们为不同用户分组定义了权限,大家可以使用不同的用户
进行browse/import/checkout试验(在客户端软件上进行)
访问路径为http://localhost/svn
参考了前人的经验:
http://www.subversion.org.cn/?action-viewnews-itemid-62
http://www.cnblogs.com/shiningrise/archive/2009/12/23/1630871.html
http://blog.youkuaiyun.com/jnstone3/archive/2009/03/06/3962521.aspx
http://jiangzif0.blog.163.com/blog/static/48423595200911234299230/