一、安装
第一次安装Subversion,在昨天的安装过程中,出现了一些问题:
第一步,安装Apache+Subversion 首先,我选择了apache_2.2.3+svn-1.3.2的组合。开始安装Apache server就报错,提示http.conf第133行出错,打开在前面加了个#,启动成功。接着安装svn-1.3.2,配置好httpd.conf之后发现apche的服务无法启动,说是无法加载mod_dav_svn.so。baidu之后发现是svn无法在apache2.2下面安装,其
官方下载页面也有提示说:Note that the Apache modules included in this package was compiled against Apache HTTP Server 2.0, and thus will
not work with Apache HTTP Server 2.2.下载的过程中,没注意这个东西!下次得多留意这些细节。
只好重新下载安装apache_2.0.59版本,把Subversion/bin下面所有.dll文件复制到Apache Group\Apache2\bin下,提示有文件覆盖,选择不覆盖;再将Subversion/bin下的.so文件复制到Apache Group\Apache2\modules下。
安装Apache2.x时注意事项:
请确保你输入正确的服务器URL(如果你的服务器没有DNS名称,你可以直接输入IP地址)。我建议你将Apache安装成 for all Users,on Port 80,as a service。注意:如果你已经有一个IIS或者其它的程序使用80端口,安装可能会失败。如果是这样,你可以到程序目录下的Apache Group\Apache2\conf目录中找到文件httpd.conf,将其中的Listen 80改成一个不用的端口,比如Listen 81。重新运行安装程序,这次应该不会再有问题了。
第二步,修改apache的配置文件
接著打开Apache HTTP Server 的 httpd.conf(在 /conf/ 目录下),先找到以下两行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
把這两行最前面的 '#' 字符刪除,然后把下面这行加到这些 LoadModule 指令的后面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
用记事本打开 Apache HTTP Server 的 httpd.conf,在文件最后面加上以下几行:
<Location /svn>
DAV svn
SVNParentPath d:/svn
</Location>
其中d:/svn为你要建的仓库的父目录(必须为本地目录),最好用双引号引一下.
第三步,创建仓库
根据apache的配置文件的设置建立目录:d:/svn.然后我们就可以在下面建立仓库了,创建方法如下:
c:\>svnadmin create d:/svn/repository(svn大写的时候居然验证访问被拒绝)
命令执行成功之后,会在d:/svn/repository下面生成很多的文件和目录
第四步,使用
重新启动Apache Server
在浏览器中输入网址:
http://localhost/svn/repository/
这时候,看到页面显示:
Revision 0: /
Powered by Subversion version 1.3.2 (r19776).
安装成功,接下来将进行进一步的设置。
二、配置
1. 以两种方式运行
(1) 以apache方式运行
svn使用apache的权限管理对档案库及目录进行读写管理。
htpasswd的调用:
1)用cmd进入到Apache的bin目录下,直接开始调用
2)把htpasswd添加到系统变量里.
建立保存用户名和密码的文件
htpasswd -c svn-auth-filename username1
然后,会提示输入密码,这里就加入了一个用户了。然后再加一个用户:
htpasswd -m /svn-auth-filename username2
建立控制用户访问权限的文件svn-access-filename
[svn1:/] //这表示,仓库svn1的根目录下的访问权限
harry = rw // svn1仓库harry用户具有读和写权限
sally = r // svn1仓库sally用户具有读权限
[svn2:/] //svn2仓库根目录下的访问权限
harry = r // harry用户在svn2仓库根目录下只有读权限
sally = // sally用户在 svn2仓库根目录下无任何权限
[svn2:/src] //svn2仓库下src目录的访问权限
harry=rw
sally=r
[/] // 这个表示在所有仓库的根目录下
* = r // 这个表示对所有的用户都具有读权限
[groups] // 这个表示群组设置
svn1-developers = harry, sally // 这个表示某群组里的成员
svn2-developers = sally
[svn1:/]
@svn1-developers = rw // 如果在前面加上@符号,则表示这是个群组权限设置
然后修改httpd.conf配置:
<Location /svn>
DAV svn
SVNParentPath /svn
AuthType Basic
AuthName "Subversion repository"(注意引号)
AuthUserFile svn-auth-filename (保存用户名和密码)
Require valid-user
AuthzSVNAccessFile svn-access-filename(保存用户访问的权限策略)
</Location>
(注:)
svn-access-filename,svn-auth-filename 文件直接可以放到C:\Program Files\Apache Group\Apache2\下,这也是默认的目录,置于其他目录下,启动apache server出现错错误。
AuthUserFile文件需要用htpasswd工具创建、维护;AuthzSVNAccessFile 文件可以用Subversion创建仓库以后,生成的conf文件夹下面的authz文件加以修改。
如果已经有一个apache服务,希望两个apache服务同时运行,则修改其中一个的服务端口。
修改httpd.conf中的一行: Listen 80 将80改成其他不用的端口号
启动apahce就可以通过
http://svnmachine-ip/svn/svn1
http://svnmachine-ip/svn/svn2
这两个URL来访问仓库了,当然,要受权限的限制,必须是合法用户才能访问且具有相应的权限
(2) svnserve方式运行
这种方式的运行又可以分为以下两种(这和vsftp有些相似)
1) standalone mode
直接运行 #svnserve –d
运行 lsof -i :3690可以看到SVN服务器已经在运行
2) xinetd mode
在/etc/xinetd.d/下生成svnserve文件,内容如下
service svnserve
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = svnpub (最好建一个这样的用户管理svn)
server = /usr/local/bin/svnserve
server_args = -i
}
编辑 /etc/services 檔,加入底下两行:
svnserve 3690/tcp # Subversion svnserve
svnserve 3690/udp # Subversion svnserve
重启xinetd服务,运行 netstat -a|grep svnserve 可以看到SVN服务器已经在运行
默认下客户可以以匿名方式通过svn://方式任意访问档案库,为了限制其权限,比如只允许读操作,可以通过修改档案库conf子目录中的svnseve.conf文件来实现。
#vi /svn1/conf/svnseve.conf
将下面三行前的#去掉
anon-access = none //则匿名用户不可以通过svn://方式访问档案库
auth-access = write
password-db = passwd //使用passwd中的用户名和密码进行认证,有一点不好的是这里面的密码输的是明文
authz-db = authz //使用authz中的权限控制策略,写法如同apache中的svn-access-filename
如果想更强的安全性可以使用svn+ssh://访问机制。
首当用户通过svn+ssh://访问时,服务器会自动启动ssh认证机制,要求用户输入密码,对于window用户来说还需要安装第三方软件openssh,才可以采用这种机制。
2. 将代码导入项目仓库。在要导入仓库的目录上面点击右键,点击TortoiseSVN项的子菜单Import…在URl里面填写http://服务器IP/svn/project,这里project就是刚刚建立的项目仓库,
在下面填入注释,点击OK,弹出提示输入用户名密码对话框,填入flmn和password,就可以把代码导入仓库了。刚刚导入的文件并没有显示被svn管理,现在把这个目录里文件都删除,再在右键菜单里选择SVN Checkout…就可以导出代码,再看这个目录,就有个小图标在文件夹图标下面了。
3. 对于其它操作,和CVS差不多,这里就不赘述了。可以参考TortoiseSVN帮助文件。