svn数据仓库配置,权限配置

svn服务的开启有两种方式,

·        自带的svnserve服务(访问地址类似于svn://192.168.80.18/repos/)

·        与Apache配合使用  (访问地址类似于http://192.168.80.18:8077/repos/)

下面先进入第一种的配置:

1 安装,解压缩下载的svn压缩包到对应文件夹(建议路径不要有空格与中文)

Svn的安装目录截图:

2 建立版本库,首先建立 E:\svn 空文件夹作为所有版本库的根目录。然后,进入命令行并切换到安装subversion的bin目录(建议将此目录设为path,也就是说配置环境变量)。

我的电脑上的环境变量中的部分配置是:

D:\Installed\Subversion\bin;C:\ProgramFiles\TortoiseSVN\bin;D:\software\Subversion\bin

输入如下命令:

svnadmin create E:\svn\repos    (按照此配置,对应的svn的URLpath是:svn://装svn服务器的ip地址\repos)

创建后再E\svn\repos目录下出现了如下文件:

3 运行服务进程

在bin目录下输入:

svnserve -d -r E:\svn

参数说明:

-d:效果同于--daemon

-r :效果同于--root

svnserve 将会在端口 3690 等待请求,

--daemon(两个短横线)选项告诉svnserve 以守护进程方式运行,这样在手动终止之前不会退出。不要关闭命令行窗口,关闭窗口会把svnserve 停止。

--root选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserveURL的时间

如果不加root参数,服务url为:svn://localhost/svn/repos   如下方式checkout:

而如果加上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服务是否启动,二:svn的URL地址地址写错了)

解决:首先测试svn的3690端口是否打开:telnetlocalhost 3690

如果不成功说明服务没有被正常启动,请参考前面步骤

可以将svn服务添加到系统服务中去,步骤如下:这样可以避免每次重启后需要手动运行命令的烦恼

1 在subversion的安装路径下,找到bin文件夹

2 新建一个setupservice.bat文件,内容为:

 setupservice.bat编写格式:

sc create svnserve binpath= "Subversion安装路径\bin\svnserve.exe --service -r E:\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目录)‘

解决:

推论过程:

1. A.测试1:

2.    ①运行svnserve -d -r E:\svn\repos\jmxDemo //指定jmxDemo根目录为服务的根目录

3.    ②运行svn://localhost,可以正常访问修改jmxDemo

4.    ③运行svn://localhost/jmxDemo,出现:‘svn://localhost/jmxDemo‘ non-existent in

5.

6. B.测试2:

7.    ①运行svnserve -d -r E:\svn\repos //指定jmxDemo上层目录为服务的根目录

8.    ②运行svn://localhost/jmxDemo,可以正常访问修改Repository

9.    ③运行svn://localhost,出现:Error * No repository found in ‘svn://localhost‘

10.

11.C.结论:

12.   ①SVN服务启动时指定的根目录不同,会影响相同URL的访问结果

13.   ②SVN在访问指定路径时会从服务的根目录下去寻找,即基于我们启动服务时指定的根目录

14.   ③svn://localhost指向默认的jmxDemo,svn://localhost/jmxDemo指向jmxDemo

15.   ④测试情况一的步骤③失败是因为我们已经把路径直接指向了jmxDemo的根目录

16.   ⑤测试情况二的步骤③失败是因为我们只是把路径指向了jmxDemo的上层目录

解决如下:

svn://localhost/repos/jmxDemo

而不是svn://localhost/svn/repos/jmxDemo

5 配置权限

打开建立的版本库文件夹/conf 编辑server.conf添加如下几行:

 配置内容:

1. [general]

2. password-db = passwd.conf

3. anon-access = none

4. auth-access = write

5. authz-db = authz.conf

截图:

保证文件中只有这几行是不被注释的

在当前文件夹新建authz.conf 与passwd.conf文件

编辑passwd.conf文件,添加内容:

配置内容

注意整个串前后都不要有空格

编辑authz.conf文件,添加内容: 

配置内容如下:

6 导入文件夹

重启服务,在需要导入的文件夹上右键--TortoiseSVN-> Import 输入url:svn://localhost/repos/文件夹名

此处文件夹名需要被加上,不然会把文件夹下的所有文件弄到repos文件夹下,数据乱了

输入用户名密码:toto

导入的时候可能出现的问题:

Error: Authorization failed

解决:权限问题

这个问题弄了蛮久,一直以为是拼写url的问题,找了半天没找到,然后确认问题是权限配置错误,查了半天也没看出来,后来弄清楚,是因为导入涉及到在根下写东西,所以必须要有根下的w权限,添加如下配置后问题解决: 

Java代码  

1. [/]

2. toto = 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提供httpsvn服务。

下面进入第二种配置: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模块。

Java代码  

1. LoadModule dav_module modules/mod_dav.so

2. LoadModule dav_fs_module modules/mod_dav_fs.so

3.

4. LoadModule dav_svn_module "svn安装目录/bin/mod_dav_svn.so"

5. LoadModule authz_svn_module "svn安装目录/bin/mod_authz_svn.so"

注:如果拷贝了so文件到模块目录了,可以将上面两个的路径改成modules/mod_dav_svn.so的形式,否则请使用正确的绝对路径

请确认文件中未注释的数据只有以上四句

确定用来作为Subversion版本库的目录

在配置文件最后添加如下几行:

Java代码  

1. <Location /svn>

2. DAV svn

3. SVNPath f:/svn/repos

4. </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\passwordfilecjy

添加新用户(-m表示以MD5 加密密码):

htpasswd [-m] F:\svn\repos\conf\passwordfiledmm

这个地方如果加上c,会把以前的覆盖掉

更改用户密码:

htpasswd [-m] F:\svn\repos\conf\passwordfilecjy

删除用户(要用大写的D ):

htpasswd –D F:\svn\repos\conf\passwordfilecjy

接下来修改httpd.conf,在Location 标签中加入如下内容:

Java代码  

1. AuthType Basic

2. AuthName "svn repos"

3. AuthUserFile F:\svn\repos\conf\passwordfile

4. 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 标签。例如:

Java代码  

1. <LimitExcept GET PROPFIND OPTIONS REPORT>

2.   require valid-user

3. </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_modulemodules/mod_authz_svn.so

现在可以在Location 标签中使用authz 的功能了。

注:在咱们的配置文件中已经进行了此步骤。此处可以略过

一个基本的authz 配置如下:

Java代码  

1. #下面的/svn 表示url为:http://localhost:8077/svn/

2. <Location /svn>

3. #先需要启用 dav_module,然后加载 dav_svn_module

4. DAV svn

5. #版本库的本地路径

6. SVNPath f:\svn\repos

7. #下面一行是使用版本库上一级文件夹的方式来控制所有版本库

8. #SVNParentPath e:/svn

9. #权限控制文件

10.AuthzSVNAccessFile D:\Java\apache\conf\authz.conf

11.# try anonymous access first, resort to real

12.# authentication if necessary.

13.Satisfy Any

14.Require valid-user

15.#启用基本的验证,比如用户名/密码对。

16.#在用户名/密码对文件中的用户名才可以再authz.conf文件中配置生效

17.AuthType Basic

18.AuthName "cjy repos"

19.AuthUserFile D:\Java\apache\conf\passwordfile

20.</Location>

AuthzSVNAccessFile 指向的是authz 的策略文件,详细的权限控制可以在这个策略文件中指定。

AuthUserFile 指向加密用户文件的位置,只有在此文件中存在的用户才可以在authz策略文件中被正确配置

以(#)开头的行会被忽略;在它的简单形式里,每一小节命名一个版本库和一个里面的路径;认证用户名是在每个小节中的选项名;每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到或者值留空,访问是不允许的;* 表示所有用户,用它控制匿名用户的访问权限;@符号区分组和用户。如:

Java代码  

1. [groups]

2. # 定义组

3. vip = dmm

4. users = cjy,light

5. [/]

6. * = r

7. @vip = rw

8. [/branches/dev]

9. @users = rw

10.[/tags]

11.cjy = rw

12.[/private]

13.* =

14.@vip= r

使用SVNParentPath 代替SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 cjy将对所有版本库里的/tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:

Java代码  

1. [groups]

2. project1_vip = cjy,dmm

3. project2_vip = cjy,light

4. [repos1:/]

5. * = r

6. @ project1_vip = rw

7. [repos2:/]

8. * = r

9. @ 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 MethodNot Allowed (http://localhost)

2、不启动E:\subversion\bin\svnserve.exe,但启动了ApacheSVN,访问(tortoiseSVN–> Repo – browser)或提交(SVNCommit)情形如下:

现象:svn://localhost/svn/repos不能访问或提交,提示:Error* Can‘t connect to host ‘localhost‘: 由于目标机器积极拒绝,无法连接。 但file:///e:/svn/repos 和http://localhost/svn/repos 可以访问或提交。

原因:svn://是独立服务器svnserver 自己的协议。file:///是本地访问,即服务器端和客户端在一个机器上

3、  具体到使用so的时候报错 Cannotload 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 LoadModulepath modules/mod_dav_svn.so"

解决:几个DLL冲突,apache/bin/*.DLL 最终列表:

Java代码  

1. [-,需要删除的]:

2. [+.从Subs复制过来的]

3. [?,未知,可以不要]

4.

5. [-]libapr-1.dll

6. [-]libapriconv-1.dll

7. [-]libaprutil-1.dll

8.

9. [+]libdb44.dll

10.[+]libsasl.dll

11.[+]ssleay32.dll

12.[?]intl3_svn.dll

Installing the Apache2.2service

The Apache2.2 service is successfullyinstalled.

Testing httpd.conf....

Errors reported here must be corrected beforethe service can be started.

httpd.exe: Could not reliably determine theserver‘s fully qualified domain name

, using 192.168.80.18 for ServerName

(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 
: make_sock: c

解决:修改端口(在Apache配置文件中查询Listen,改成其他端口,因为此端口已经被占用)

Couldnot 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 toserver (http://localhost:8077)解决:服务未正常启动

注:附件内容:

分别为Apache2.2.9与svn1.6.0的安装文件(此配合不会出现版本冲突)

svnserver下权限配置(复制文件到svn版本库的config文件夹下,重启svnserver即可)

Apache下全线配置(复制文件到Apache安装文件夹的config文件夹下,重启Apache即可)

时间: 2024-12-21 01:00:03

svn数据仓库配置,权限配置的相关文章

Linux 下SVN安全及权限配置

转载请注明,原创地址:点击打开链接 http://blog.csdn.net/u010587274/article/details/51015532 前期的步骤可参考我的另一篇博客:点击打开链接   Linux(CentOS 7.0)下使用yum安装配置和使用svn 个人微信公众号:tanzi_888 (潭子技术圈) [[email protected] ~] cd /root/svn/project/conf passwd: 里面保存用户信息,基本格式为:user = passwdauthz:

Linux下SVN server 的使用及权限配置

[Linux下SVN server 的使用及权限配置] 参考:http://www.cnblogs.com/heinoc/p/3805779.html

centos6中搭建svn服务器以及相关权限配置

使用yum方式安装svn服务器软件,在centos中搭建团队使用的代码仓库,为开发成员创建账号以及分配权限: 1.检查svn服务软件安装情况 svnserve –version命令查看安装情况, 出现"-bash: /usr/bin/svnserve: No such file or directory"提示说明没有安装,直接进入第2步, 否则会显示已安装svn服务器软件版本信息"svnserve, version -",可以使用以下命令删除已安装的版本 yum r

Ubuntu14下安装svn仓库,以及权限配置

sudo apt-get update 接下来安装svn apt-get install subversionapt-get install libapache2-svn 检查svn是否安装成功了: svn --version 检查svn是否安装成功了: # svn --versionsvn, version 1.8.8 (r1568071)   compiled Aug 20 2015, 12:51:30 on x86_64-pc-linux-gnu Copyright (C) 2013 Th

Linux下SVN部署/安全及权限配置,实现web同步更新

转自:http://www.cnblogs.com/me115/archive/2013/04/07/3002058.html 本文包含以下内容: SVN服务器安装 SVN权限管理 SVN使用SASL加密 SVN上传时同步其它目录 需求 在WEB线上版本管理的基础上,能够在代码上传之后,立刻通过WEB访问,查看修改效果:同时,保证数据的安全性: SVN安装 SVN服务器有2种运行方式:独立服务器和借助apache运行. svnserve和apache相比是轻量级的,也比较简单,svnserve包

svn Server authz 配置示例(文件夹权限配置)

[aliases] [groups] admin = jiangzhehao technology = chenlei,liulei,xunzheng,qiaomingjie sales = chenlei,liuxiaocong,wuzhikai [hdxy:/] @admin = rw @technology = r @sales = r [hdxy:/00 公司资料] @admin = rw @technology = r @sales = r [hdxy:/05 技术资料] @admin

SVN的搭建(权限配置篇)

如要转载,请注明出处! 两个问题: 如何维护多个目录或者仓库 目录权限如何设置 ===================================================================== 1.维护多个目录或仓库 方案一:分别创建两个仓库,配置两套设置 方案二:在同个目录下创建两个仓库,将passwd.authz提到根目录下,两个仓库的全局配置公用一套配置 方案三:只要一个仓库,但是在仓库下设置多个子目录 方案一不合适.方案二可取.方案三可取. 但是当多个项目都比较

Centos6.5 SVN服务器 搭建及配置

查看是否可以从yum软件仓库找到SVN安装包 yum list *svn* 2 从使用yum软件仓库安装SVN,执行 yum install subversion.i686 中间会列出要关联的包,并提示下载:输入“y”并确认 3 SVN已经安装成功 END 创建版本库 查看SVN 命令 svn -help 创建版本库目录 mkdir -p /home/svn/svnfile 创建版本库 svnadmin create /home/svn/svnfile 生成以下目录 进入conf目录(这是该SV

Ubuntu14.0.4系统下 SVN的安装与配置

Ubuntu14.0.4系统下  SVN的安装与配置 SVN(subversion)是近年来崛起的版本管理工具,绝大多数开源软件都使用了svn作为代码版本管理软件.对于写代码的用户来说使用版本控制管理工具svn来说最合适 不过了,下面就介绍一下在Ubuntu 14.0.4下安装和配置SVN的简要方法! 本文是小编亲自整理.测试.验证过的方法,也可以算是最全.最简易的SVN安装配置方法! 下面文档分为四个部分: 1.在Ubuntu 14.0.4系统中安装SVN 2.配置SVN 3.启动和关闭svn