花了一天时间,走了不少弯路,解决N多错误,终于全部完成了,记下安装过程中遇到的各种问题,希望对初步使用svn的TX们有所帮助。
关于svn的介绍此处略过,直接进入正题。
svn服务的开启有两种方式,
- 自带的svnserve服务(访问地址类似于svn://192.168.80.18/repos/)
- 与Apache配合使用 (访问地址类似于http://192.168.80.18:8077/repos/)
下面先进入第一种的配置:
1 安装,解压缩下载的svn压缩包到对应文件夹(建议路径不要有空格与中文)
2 建立版本库,首先建立 f:\svn 空文件夹作为所有版本库的根目录。然后,进入命令行并切换到安装subversion的bin目录(建议将此目录设为path)。
输入如下命令:
svnadmin create f:\svn\repos
3 运行服务进程
在bin目录下输入:
svnserve -d -r f:\svn
注:-d参数效果同于--daemon
-r参数效果同于--root
svnserve 将会在端口 3690 等待请求,
--daemon(两个短横线)选项告诉 svnserve 以守护进程方式运行,这样在手动终止之前不会退出。不要关闭命令行窗口,关闭窗口会把 svnserve 停止。
--root选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserve URL的时间
如果不加root参数,服务url为:svn://localhost/svn/repos
而如果加上root参数,服务url为:svn://localhost/repos
此处的启动配置会影响服务url,如果输入url错误,会导致访问的时候出现异常
4 为了验证svnserve正常工作,使用TortoiseSVN -> Repo-browser 来查看版本库。在弹出的 URL 对话框中输入:
svn://localhost/repos
点 OK 按钮后就可以看见 repo1 版本库的目录树结构了,只不过这时 repo1 是个空库。
可能出现的问题:
Error: Can't connect to host '': 由于目标机器积极拒绝,无法连接。
解决:首先测试svn的3690端口是否打开:telnet localhost 3690
如果不成功说明服务没有被正常启动,请参考前面步骤
可以将svn服务添加到系统服务中去,步骤如下:这样可以避免每次重启后需要手动运行命令的烦恼
1 在subversion的安装路径下,找到bin文件夹
2 新建一个setupservice.bat文件,内容为:
sc create svnserve binpath= "Subversion安装路径\bin\svnserve.exe --service -r f:\svn" depend= Tcpip start= auto
sc start svnserve
pause
这里有个需要注意的问题:“start= auto"等号后面要加上一空格
3 运行,这时在服务里可找到一个名为svnserve的服务。
在cmd命令行下查看打开的端口:netstat -ano就看到3690端口打开了
Error: No repository found in 'svn://localhost/svn/repos/jmxDemo'
解决:
A.测试1:
①运行svnserve -d -r f:\svn\repos\jmxDemo //指定jmxDemo根目录为服务的根目录
②运行svn://localhost,可以正常访问修改jmxDemo
③运行svn://localhost/jmxDemo,出现:'svn://localhost/jmxDemo' non-existent in
B.测试2:
①运行svnserve -d -r f:\svn\repos //指定jmxDemo上层目录为服务的根目录
②运行svn://localhost/jmxDemo,可以正常访问修改Repository
③运行svn://localhost,出现:Error * No repository found in 'svn://localhost'
C.结论:
①SVN服务启动时指定的根目录不同,会影响相同URL的访问结果
②SVN在访问指定路径时会从服务的根目录下去寻找,即基于我们启动服务时指定的根目录
③svn://localhost指向默认的jmxDemo,svn://localhost/jmxDemo指向jmxDemo
④测试情况一的步骤③失败是因为我们已经把路径直接指向了jmxDemo的根目录
⑤测试情况二的步骤③失败是因为我们只是把路径指向了jmxDemo的上层目录
解决如下:
svn://localhost/repos/jmxDemo
而不是 svn://localhost/svn/repos/jmxDemo
5 配置权限
打开建立的版本库文件夹/conf 编辑server.conf 添加如下几行:
[general]
password-db = passwd.conf
anon-access = none
auth-access = write
authz-db = authz.conf
保证文件中只有这几行是不被注释的
在当前文件夹新建authz.conf 与passwd.conf文件
编辑passwd.conf文件,添加内容:
[users]
cjy = cjy
注意整个串前后都不要有空格
编辑authz.conf文件,添加内容:
[/]
cjy = rw
6 导入文件夹
重启服务,在需要导入的文件夹上右键--TortoiseSVN -> Import 输入url:svn://localhost/repos/文件夹名
此处文件夹名需要被加上,不然会把文件夹下的所有文件弄到repos文件夹下,数据乱了
输入用户名密码:cjy
导入的时候可能出现的问题:
Error: Authorization failed
解决:权限问题
这个问题弄了蛮久,一直以为是拼写url的问题,找了半天没找到,然后确认问题是权限配置错误,查了半天也没看出来,后来弄清楚,是因为导入涉及到在根下写东西,所以必须要有根下的w权限,添加如下配置后问题解决:
[/]
cjy = rw
注意:
版本库与导入项目最好不要重名,如果重名:
比如把arm下的东东导入到了这个版本库:svn://localhost/arm。
而配置权限的时候,[arm:/]这才代表工程的根目录,即:svn://localhost/arm
要想配到权限到目录下,就得这么写: [arm:/arm/],不然出错,且问题不容易排出
7 check out之,svn://localhost/repos/文件夹名 注意大小写区分,不然可能也会出现Error: Authorization failed错误
OK,至此svn自带服务配置完成,可以进行其他测试如update,commit等。都不会再出现问题。下面说明Apache配合svn提供http svn服务。
下面进入第二种配置:1、安装Apache,Apache的安装文件时一个msi文件可以直接双击运行(建议路径不要有空格与汉字)
2、从Subversion安装目录的 bin 子目录将 intl3_svn.dll、libdb44.dll 拷贝到Apache安装目录的bin 文件夹
3、从Subversion安装目录的 bin 子目录将 mod_authz_svn.so、mod_dav_svn.so 拷贝到Apache的模块目录(Apache 安装目录的 modules 文件夹)此步可省,配置的时候通过绝对路径的方式指定也可以
4、修改Apache的配置文件 httpd.conf ,使用LoadModule来加载mod_dav_svn模块。
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module "svn安装目录/bin/mod_dav_svn.so"
LoadModule authz_svn_module "svn安装目录/bin/mod_authz_svn.so"
注:如果拷贝了so文件到模块目录了,可以将上面两个的路径改成modules/mod_dav_svn.so 的形式,否则请使用正确的绝对路径
请确认文件中未注释的数据只有以上四句
确定用来作为Subversion版本库的目录
在配置文件最后添加如下几行:
<Location /svn>
DAV svn
SVNPath f:/svn/repos
</Location>
这个配置告诉Apache首先需要启用 dav_module,然后加载 dav_svn_module 。版本库对外的URL是:
http://localhost:8077/svn ,所有的Subversion版本库在物理上位于f:/svn/repos 。
配置完毕后重新启动 Apache,打开浏览器,输入 http://localhost:8077/svn
将会看到成功画面:
svn - Revision 10: /arm
..
diary/
ref/
temp/
--------------------------------------------------------------------------------
Powered by Subversion version 1.6.0 (r36650).
这表示 Apache 的 dav_svn 模块已经可以正常工作了(现在已经可以通过http的方式获取svn中的内容了)。
5、测试通过之后,进行权限配置
5.1、基本 HTTP 认证
最简单的客户端认证方式是通过 HTTP 基本认证机制,简单的使用用户名和密码来验证一个用户的身份。Apache提供了一个 htpasswd 工具来管理一个用户文件,这个文件包含用户名和加密后的密码,这些就是你希望赋予 Subversion 特别权限的用户。htpasswd 可以在 Apache 的 bin 安装目录下找到。具体使用方法如下:
创建用户文件:
htpasswd -cm F:\svn\repos\conf\passwordfile cjy
添加新用户(-m 表示以 MD5 加密密码):
htpasswd [-m] F:\svn\repos\conf\passwordfile dmm
这个地方如果加上c,会把以前的覆盖掉
更改用户密码:
htpasswd [-m] F:\svn\repos\conf\passwordfile cjy
删除用户(要用大写的 D ):
htpasswd –D F:\svn\repos\conf\passwordfile cjy
接下来修改 httpd.conf,在 Location 标签中加入如下内容:
AuthType Basic
AuthName "svn repos"
AuthUserFile F:\svn\repos\conf\passwordfile
Require valid-user
说明:
AuthType Basic:启用基本的验证,比如用户名/密码对。
AuthName "svn repos":当一个认证对话框弹出时,出现在认证对话框中的信息。(最好用英文,TortoiseSVN 不支持中文,安装语言包除外。)
AuthUserFile F:\svn\repos\conf\passwordfile:指定F:\svn\repos\conf\passwordfile为用户文件,用来验证用户的用户名及密码。
Require valid-user:限定用户只有输入正确的用户名及密码后才能访问这个路径
重新启动 Apache ,打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了,现在只有 passwd 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 "Require valid-user" 为 "Require user cjy dmm" 将只有用户文件中的 cjy 和 dmm 可以访问该版本库。
有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如:
<LimitExcept GET PROPFIND OPTIONS REPORT>
require valid-user
</LimitExcept>
以上配置将使匿名用户有读取权限,而限制只有 passwd 中配置的用户可以使用写操作。
如果这还不能满足你的要求,你希望精确的控制版本库目录访问,可以使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。
5.2、用 mod_authz_svn 进行目录访问控制
首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改 httpd.conf 文件,添加:
LoadModule authz_svn_module modules/mod_authz_svn.so
现在可以在 Location 标签中使用 authz 的功能了。
注:在咱们的配置文件中已经进行了此步骤。此处可以略过
一个基本的 authz 配置如下:
#下面的/svn 表示url为:http://localhost:8077/svn/
<Location /svn>
#先需要启用 dav_module,然后加载 dav_svn_module
DAV svn
#版本库的本地路径
SVNPath f:\svn\repos
#下面一行是使用版本库上一级文件夹的方式来控制所有版本库
#SVNParentPath e:/svn
#权限控制文件
AuthzSVNAccessFile D:\Java\apache\conf\authz.conf
# try anonymous access first, resort to real
# authentication if necessary.
Satisfy Any
Require valid-user
#启用基本的验证,比如用户名/密码对。
#在用户名/密码对文件中的用户名才可以再authz.conf文件中配置生效
AuthType Basic
AuthName "cjy repos"
AuthUserFile D:\Java\apache\conf\passwordfile
</Location>
AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定。
AuthUserFile 指向加密用户文件的位置,只有在此文件中存在的用户才可以在authz策略文件中被正确配置
以(#)开头的行会被忽略;在它的简单形式里,每一小节命名一个版本库和一个里面的路径;认证用户名是在每个小节中的选项名;每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到或者值留空,访问是不允许的; * 表示所有用户,用它控制匿名用户的访问权限;@符号区分组和用户。如:
[groups]
# 定义组
vip = dmm
users = cjy,light
[/]
* = r
@vip = rw
[/branches/dev]
@users = rw
[/tags]
cjy = rw
[/private]
* =
@vip= r
使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 cjy将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:
[groups]
project1_vip = cjy,dmm
project2_vip = cjy,light
[repos1:/]
* = r
@ project1_vip = rw
[repos2:/]
* = r
@ project2_vip = rw
这样 repos1的 project1_vip 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样 repos2 的 project2_vip 组也不能修改 repos1 版本库的文件。
可能出现的错误:
1、路径或权限不足时将出现错误信息提示:
http://localhost (路径不对)
Error * PROPFIND request failed on '/' PROPFIND of '/': 200 OK (http://localhost)
http://localhost/svn (权限不足)
Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': 403 Forbidden (http://localhost)
http://localhost/svn/repos (正常显示)
http://localhost/repos (权限不允许)
Error * PROPFIND request failed on '/repos' PROPFIND of '/repos': 405 Method Not Allowed (http://localhost)
2、不启动E:\subversion\bin\svnserve.exe ,但启动了ApacheSVN ,访问(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下:
现象:svn://localhost/svn/repos 不能访问或提交,提示:Error * Can't connect to host 'localhost': 由于目标机器积极拒绝,无法连接。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以访问或提交。
原因:svn:// 是独立服务器 svnserver 自己的协议。file:/// 是本地访问,即服务器端和客户端在一个机器上
3、 具体到使用so的时候报错
Cannot load mod_dav_svn.so into server: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\
解决:可能是版本的冲突,请使用2.2.9配1.6
解压缩下载的svn,里面会有一个readme文件,打开后会列出其支持的相关应用列表,请下载相对应的apache版本
推荐2.2.9+1.6.0,版本较新,且已经测试通过(附件中有安装文件)
httpd.exe: Syntax error on line 87 of D:/Java/apache/conf/httpd.conf: Invalid LoadModule path modules/mod_dav_svn.so"
解决:几个DLL冲突, apache/bin/*.DLL 最终列表:
[-,需要删除的]:
[+.从Subs复制过来的]
[?,未知,可以不要]
[-]libapr-1.dll
[-]libapriconv-1.dll
[-]libaprutil-1.dll
[+]libdb44.dll
[+]libsasl.dll
[+]ssleay32.dll
[?]intl3_svn.dll
Installing the Apache2.2 service
The Apache2.2 service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
httpd.exe: Could not reliably determine the server's fully qualified domain name
, using 192.168.80.18 for ServerName
(OS 10048)
通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : make_sock: c
解决:修改端口(在Apache配置文件中查询Listen,改成其他端口,因为此端口已经被占用)
Could not open the requested SVN filesystem [500, #720123]
解决:路径没配正确
是路径的问题
在httpd.conf里设的SVNParentPath 是f:\svn
实际的repository的路径是f:\svn\repos\Project1
SVNParentPath 应该设为f:\svn\repos
问题解决
Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': could not connect to server (http://localhost:8077)解决:服务未正常启动
注:附件内容:
分别为Apache2.2.9与svn1.6.0的安装文件(此配合不会出现版本冲突)
svnserver下权限配置(复制文件到svn版本库的config文件夹下,重启svnserver即可)
Apache下全线配置(复制文件到Apache安装文件夹的config文件夹下,重启Apache即可)
分享到:
相关推荐
本资源提供了从安装到配置的全套指南,帮助用户快速建立SVN环境。 1. **SVN安装**: - 下载SVN客户端:资源中的`svn-1.4.5-setup.exe`是Subversion的安装程序,用户需先运行此文件进行安装。在安装过程中,按照...
在软件开发过程中,版本控制系统是不可或缺的工具,Subversion(简称SVN)就是其中的一种,它用于管理项目源代码的历史版本,确保团队协作时代码的一致性和可追踪性。Maven作为Java项目管理和构建工具,同样支持与...
《小乌龟SVN全套(含服务器):深入理解Windows SVN环境搭建与使用》 小乌龟SVN,全称TortoiseSVN,是一款在Windows操作系统上广泛使用的Subversion(SVN)版本控制系统客户端。它以其直观易用的图形用户界面而闻名...
本教程将详述如何在Windows 10操作系统上安装并配置SVN,以及安装中文插件,以实现更便捷的代码管理和团队沟通。 首先,让我们了解什么是SVN。Subversion是一个开源的版本控制系统,它允许用户跟踪文件和目录的修改...
SVN(Subversion)是一种广泛...综上所述,"SVN部署所有资料"可能包含了从安装配置SVN服务器到客户端使用,再到团队协作和版本控制策略的全套教程和相关资源。掌握这些知识点,将有助于你高效地管理和协作软件项目。
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许多人协同工作,记录每次修改,以便在团队中轻松协作和回溯到任何历史版本。以下将详细介绍标题和描述中涉及的SVN服务器、...
- `TortoiseSVN使用教程[多图超详细].doc`:这份多图详尽的教程涵盖了从安装到日常使用的全过程,通过图文并茂的方式讲解,适合初学者。 - `SVN使用手册大全(史上最全).doc`:这份文档全面介绍了SVN的使用,包括...
SVN,全称为Subversion,是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件的变更历史。在给定的“SVN服务器加客户端.7z”压缩包中,包含了两个主要组件:VisualSVN Server和TortoiseSVN,它们是...
SVN,全称为Subversion,是一种广泛用于软件版本控制系统,特别是在团队开发中,它能够有效地管理项目中的源代码和其他文件的版本。...通过提供的压缩包,你可以获取到从客户端到服务器端的全套资源,开始你的SVN之旅。
- **检出**: 用户可以从SVN仓库中获取最新版本的项目文件到本地工作副本。 - **提交**: 当本地修改完成后,用户可以通过提交将更改同步回SVN仓库。 - **更新**: 保持本地副本与仓库同步,获取其他团队成员的...
Git的下载与安装过程很简单,访问官方下载网站选择适合的操作系统的版本即可。Git在本地拥有三个主要工作区域:工作区、暂存区和本地仓库。工作区是文件被修改的区域,暂存区是准备提交的文件的临时存储区,而本地...
【标题】"attachments"所代表的是一个与软件开发相关的压缩包文件,可能包含了各种开发工具或项目的源码、脚本和配置文件。这个压缩包可能是为了方便开发者在不同环境中快速搭建项目或者进行版本控制。 【描述】...
- **定制**:要进行Nutch的定制开发,可以从研究`build.xml`文件入手。这个文件定义了构建过程中的各个步骤,通过修改或扩展这些步骤,可以实现对Nutch的功能定制。 #### 八、命令行操作示例 以下是Nutch的一些...
VS2008支持与其他版本控制系统集成,如Microsoft的Team Foundation Server(TFS)或其他第三方系统,如Subversion(SVN)。这使得团队协作和代码版本管理变得更加便捷。 **9. 数据库工具** 对于数据库相关的项目,...
【描述】中的“based on gpcv1248 hardware car recorder sdk turnkey solution”表明这个SDK是围绕GPCV1248硬件平台构建的,"turnkey solution"意味着提供了一个即插即用的全套解决方案...
1. **Subversive**:这是Eclipse中的一个SVN(Subversion)客户端,允许开发者版本控制代码。Subversive提供了与SVN服务器交互的功能,如检出、提交、更新、合并和解决冲突,是团队协作开发不可或缺的工具。 2. **...