svn服务器配置笔记
前几天在网上找资料给我们的项目配了一个SVN服务器,今天想把这些资料和心得写下来,以后用得着!
一、准备工作
1、下载subversion,地址:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=11151&expandFolder=11151&folderID=91。这里有各个版本的安装文件,我用的是1.6.1windows msi格式的安装文件,这个版本的安装文件支持用Apache服务器作为SVN服务器,Apache服务器版本要求2.2以上。
2、下载TortoiseSVN,地址:http://tortoisesvn.net/downloads。
3、下载IDE插件,如果用visual studio2005,2008或者2010作为开发环境,可以下载AnkhSVN插件来在visual studio中利用SVN管理源代码,地址:http://ankhsvn.open.collab.net/downloads。如果是用Eclipse或者MyEclipse作为开发环境,可以下载subeclipse插件来在Eclipse中利用SVN管理源代码 http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA。我们项目用的是c#开发,所以我们用的IDE是vs2008,所以下面主要介绍的是在vs2008上安装AnkhSVN插件来管理源代码。
4、下载Apache服务器,地址:http://httpd.apache.org/download.cgi,在Apache官网上可以找到2.2以上版本的Apache服务器。
二、安装
这几个软件的安装都很傻瓜式,都是一直next到最后,TortoiseSVN安装完后需要重启系统,不过如果安装了AnkhSVN插件的话,TortoiseSVN不是必须的。
安装好AnkhSVN后,打开vs2008,打开菜"工具"->选项,找到souce control 选择”插件选择“在右边的插件选择下拉列表中选择AnkhSVN-subversion support for visual studio。这样visual studio就会出现相应的菜单和界面,然后就可以在visual studio上直接进行svn操作了。
三、建立版本库
安装subversion的时候会自动配置好环境变量。建立版本库可以直接通过dos命令,或者用TortoiseSVN。我这里介绍用dos命令创建版本库。打开dos界面,输入:
svnadmin create e:\svn\repository
这样就在e盘的svn目录下建立了名为repository的版本仓库。在repository文件夹下subversion会自动建立一些文件夹,待会儿会讲到。
四、架设SVN服务器
svn服务器的架设有两种方式:
一是基于svnserve,这种方式是让客户端通过svn协议访问版本库,如果代码只是在局域网内共享的话,优先考虑这种方式,因为这种方式最原始,最高效。
二是基于Apache服务器,这种方式是让客户端通过http协议访问版本库,当代码需要跨网共享的时候,我们就要用到这种方式了。
架设基于svnserve的svn服务器,在dos界面输入以下命令:
svnserve --daemon --root e:\svn
这个命令在服务器端建立了一个守护线程监听3690端口(svn默认端口)等待请求。dos窗口不能关闭,否则守护线程退出。这个方法不是最好的方法,因为这样,每次重启服器的时候都要重新打开一个dos窗口,并且要一直保持dos窗口。最好的方法是将svnserve作为windows服务运行,运行如下命令:
sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
--root c:\repos" displayname= "Subversion" depend= tcpip start= auto
sc
的命令行很特殊。在 key= value
对中,key 与 =
之间不能有空格,但是在 value 之前,必须有空格。服务安装完毕后,你需要在服务管理器中启动它(仅此一次;当服务器重启后它会自动启动)。可以通过TortoiseSVN的访问svn://localhost/repository测试svn服务器是否架设成功。
架设基于Apache服务器的svn服务器。
找到 Subversion 安装目录下的以下文件:
bin/mod_authz_svn.so
bin/mod_dav_svn.so
复制到 Apache 安装目录下 modules 目录中
bin/intl3_svn.dll
bin/libdb*.dll
复制到 Apache 安装目录下 bin 目录中(这里似乎并不是必须的,我猜想这里或许是为了支持 Berkeley DB 而所作的操作,但我并不打算深入研究下去)
找到 Apache 安装目录下 conf/httpd.conf 文件,用文本编辑器修改:
找到以下两句取消注释:
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
增加以下两句
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
在Apache的conf/httpd.conf文件,在末尾添加以下内容
#配置虚拟目录
<location /svn>
#引用远程访问模块
DAV svn
#版本库路径
SVNPath e:\SVN\Repository
#授权文件
AuthzSVNAccessFile e:\SVN\Repository\conf\authz
#所有用户都需要身份验证
Satisfy Any
Require valid-user
#验证方式
AuthType Basic
#项目的名称
AuthName "svn repository"
#用户文件
AuthUserFile e:\SVN\Repository\conf\passwd.apache
</location>
这样基于Apache服务器的svn服务器就配置好了,下面我们就可以进行权限配置了。
五、权限控制
上面说过,建立版本库后,subversion会在版本库中建立若干文件夹,其中conf文件夹就是进行权限控制配置的,里面有三个文件svnserve.conf,password,authz。用记事本打开svnserve.conf文件:找到以下两行:
#password-db = passwd
...
#authz-db = authz
修改为:
password-db = passwd
...
authz-db = authz
用户配置,用记事本打开password文件,添加如下几行:
[users]
admin = admin
thinker = 123456
这里配置了两个用户,用户名分别为"admin"和"thinker"。其中"admin"用户的口令为"admin";"thinker"用户的口令为"123456"。如果是Apache服务器的话,password文件应该由Apache来生成,因为在 Subversion 和 Apache 中无法使用相同的 passwd 文件,因为 Apache 是以加密方式存储密码,而 Subversion 使用明文储存密码,所以要使用Apache服务器就要使用Apache生成的passwd文件。
使用Apache的bin目录下的htpasswd.exe可执行文件生成用户文件,第一次生成使用-cb参数,添加新用户使用-b。
htpasswd -cb [filename] [username] [password]
如:
htpasswd -cb passwd.apache islee 123
htpasswd -b passwd.apache another 456
然后将生成的passwd.apache文件拷到版本库的conf文件夹下,并将Apache conf文件夹下的httpd.conf刚刚添加的<location>段AuthUserFile属性值改为passwd.apache文件。
组和权限配置
用文本编辑器打开authz文件,添加如下文字:
[group]
all=thinker,admin
[/]
@all=rw
*=r
上面两段文字的意思是,添加一个用户组all,包括admin合thinker两个用户,对所有库给all用户组添加读写权限,所有用户添加读权限。
Apache服务器配置好后就可以在浏览器中通过输入http://localhost/svn测试。