本章将详细介绍前一章所涉及的两个配置文件,svnserve.conf和authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义。除此之外的其他配置、安装等内容,不是本文重点,读者若有什么疑问,请参考后面“参考文献”中列出的一些文档。
这里首先要注意一点,任何配置文件的有效配置行,都**不允许存在前置空格**,否则程序可能会出错,给你一个``Option expected``的提示。也就是说,如果你直接从本文的纯文本格式中拷贝了相关的配置行过去,需要手动将前置的4个空格全部删除。当然了,如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使,那么也许UltraEdit的“Column Mode”编辑模式,可以给你很大帮助。
svnserve.conf
-------------
``arm\conf\svnserve.conf``文件,是svnserve.exe这个服务器进程的配置文件,我们逐行解释如下。
首先,我们告诉svnserve.exe,用户名与密码放在passwd.conf文件下。当然,你可以改成任意的有效文件名,比如默认的就是passwd::
password-db = passwd.conf
接下来这两行的意思,是说只允许经过验证的用户,方可访问代码库。那么哪些是“经过验证的”用户呢?噢,当然,就是前面说那些在passwd.conf文件里面持有用户名密码的家伙。这两行的等号后面,目前只允许read write none三种值,你如果想实现一些特殊的值,比如说“read-once”之类的,建议你自己动手改源代码,反正它也是自由软件::
anon-access = none
auth-access = write
接下来就是最关键的一句呢,它告诉svnserve.exe,项目目录访问权限的相关配置是放在authz.conf文件里::
authz-db = authz.conf
当然,svn 1.3.2引入本功能的时候,系统默认使用authz而不是authz.conf作为配置文件。不过可能由于鄙人是处女座的,据说有着强烈的完美主义情结,看着svnserve.conf有后缀而passwd和authz没有就是不爽,硬是要改了。
上述的passwd.conf和authz.conf两个文件也可以作为多个代码库共享使用,我们只要将它们放在公共目录下,比如说放在``D:\svn``目录下,然后在每个代码库的svnserve.conf文件中,使用如下语句::
password-db = ..\..\passwd.conf
authz-db = ..\..\authz.conf
或者::
password-db = ../../passwd.conf
authz-db = ../../authz.conf
这样就可以让多个代码库共享同一个用户密码、目录控制配置文件,这在有些情况下是非常方便的。
authz.conf之用户分组
---------------------
``arm\conf\authz.conf``文件的配置段,可以分为两类,``[group]``是一类,里面放置着所有用户分组信息。其余以``[arm:/]``开头的是另外一类,每一段就是对应着项目的一个目录,其目录相关权限,就在此段内设置。
首先,我们将人员分组管理,以便以后由于人员变动而需要重新设置权限时候,尽量少改动东西。我们一共设置了5个用户分组,分组名称统一采用``g_``前缀,以方便识别。当然了,分组成员之间采用逗号隔开::
[groups]
#任何想要查看所有文档的非本部门人士
g_vip = morson
#经理
g_manager = michael
#北京办人员
g_beijing = scofield
#上海办人员
g_shanghai = lincon
#总部一般员工
g_headquarters = rory, linda
#小秘,撰写文档
g_docs = linda
注意到没有,linda这个帐号同时存在“总部”和“文档员”两个分组里面,这可不是我老眼昏花写错了,是因为Subversion允许我这样设置。它意味着,这个家伙所拥有的权限,将会比他的同事rory要多一些,这样的确很方便。具体多了哪些呢?请往下看!
authz.conf之项目根目录
-----------------------
接着,我们对项目根目录做了限制,该目录只允许arm事业部的经理才能修改,其他人都只能眼巴巴的看着::
[arm:/]
@g_manager = rw
* = r
- ``[arm:/]``表示这个目录结构的相对根节点,或者说是arm项目的根目录。其中的arm字样,其实就是代码库的名称,即前面用svnadmin create命令创建出来的那个arm。
-这里的``@``表示接下来的是一个组名,不是用户名。因为目前g_manager组里面只有一个michael,你当然也可以将``@g_manager = rw``这一行替换成``michael = rw``,而表达的意义完全一样。
- ``*``表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部门经理外的其他所有人”,当然也包括总经理那个怪老头
- ``* = r``则表示“那些人只能读,不能写”
authz.conf之项目子目录
-----------------------
然后,我们要给总部人员开放日志目录的读写权限::
[arm:/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =
这个子目录的设置有些特色,因为从需求分析中我们知道,这个子目录的权限范围要比其父目录小,它不允许除指定了的之外其他任何人访问。在这段设置中,我们需要注意以下几点:
-我敢打赌,设计svn的家伙们,大部分都是在类unix平台下工作,所以他们总喜欢使用``/``来标识子目录,而完全忽视在MS Windows下是用``\``来做同样的事情。所以这儿,为了表示``diary\headquarters``这个目录,我们必须使用``[arm:/diary/headquarters]``这样的格式。当然如果你一定要用``\``,那么唯一的结果就是,Subversion会将你的这部分设置置之不理,全当没看到。
-这里最后一行的``* =``表示,除了经理、总部人员、特别人士之外,任何人都被禁止访问本目录。这一行是否可以省略呢?不行,因为**权限具备继承性**,子目录会自动拥有父目录的权限。若没有这一行,则所有帐号都可以读取``/diary/headquarters``目录下的文件。因为虽然我们并没有设置这个目录的父目录权限,可是默认的规则使得``/diary``目录的权限与根目录完全一样,从而让其余帐号获得对``/diary/headquarters``目录的r权限。所以简单来说,``* =``这一句的目的,就是割断权限继承性,使得管理员可以定制某个目录及其子目录的权限,从而完全避开其父目录权限设置的影响。
-之所以这儿需要将``@g_vip = r``一句加上,就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力,则他会和其他人一样,被``* =``给排除在外。
-如果众位看官中间,有谁玩过防火墙配置的话,可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样,那就是各个配置行之间,没有**先后顺序**一说。也就是说,如果我将本段配置的``* =``这一行挪到最前面,完全不影响整个配置的最终效果。
接下来我们看看这一段::
[arm:/ref]
@g_manager = rw
@g_docs = rw
* = r
这里的主要看点,就是g_docs组里面包含了一个linda帐号,她也同时在g_headquarters组里面出现,这就意味着,linda将具备对``/ref``和``diary\headquarters``两个目录的读写权限。
authz.conf之目录表示法
-----------------------
在前面的描述中,我们都采用``[repos:/some/dir]``这样的格式来表示项目的某个目录,比如上一小节中的``[arm:/diary/headquarters]``。而实际上,Subversion允许你采用```[/some/dir]``这样的格式,即不指定代码库的方式来表示目录,此时的目录就匹配所有项目。
对于使用svnserve的用户来说,只有当svnserve运行的时候使用了``-r``参数,并且让多个代码库共享同一个目录权限文件(即authz.conf或authz)时,不指明代码库名称才有可能惹麻烦。一般情况下,我们对每个代码库都会独立使用配置文件,毕竟每个项目的目录结构,都有很大不同,混在一起意义不大。因此一般来说,为简洁起见,都可以不指明代码库名称。本文全都指明了代码库名称,主要是为了将来扩展成同一个配置文件,以方便配合Apache服务器。
对于使用Apache的用户来说,它们二者可有着很大的不同,因为此时往往习惯于使用一个公共的目录权限配置文件。如果你使用了SVNParentPath指令,则指定版本库的名字是很重要的,因为假若你使用后者,那么``[/some/dir]``部分就会与所有代码库项目的``[/some/dir]``目录匹配。如果你使用SVNPath指令,则这两种表示方式就没有什么区别了,毕竟只有一个版本库。
authz.conf的其他注意点
-----------------------
1.父目录的``r``权限,对子目录``w``权限的影响
把这个问题专门提出来,是因为在1.3.1及其以前的版本里面,有个bug,即某个帐号为了对某个子目录具备写权限,则必须对其父目录具备读权限。因此现在使用了1.3.2及其更高的版本,就方便了那些想在一个代码库存放多个相互独立的项目的管理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做diary,而arm事业部只是其中一个部门,则可以这样做::
[diary:/]
@g_chief_manager = rw
[diary:/arm]
@g_arm_manager = rw
@g_arm = r
这样,对于所有arm事业部的人员来说,就可以将svn://192.168.0.1/diary/arm这个URL当作根目录来进行日常操作,而完全不管它其实只是一个子目录,并且当有少数好奇心比较强的人想试着checkout一下svn://192.168.0.1/diary的时候,马上就会得到一个警告“Access denied”,哇,太酷了。
2.默认权限
如果说我对某个目录不设置任何权限,会怎样?马上动手做个试验,将::
[diary:/]
@g_chief_manager = rw
改成::
[diary:/]
# @g_chief_manager = rw
这样就相当于什么都没有设置。在我的svn 1.3.2版本上,此时是禁止任何访问。也就是说,如果你想要让某人访问某目录,你一定要显式指明这一点。这个策略,看起来与防火墙的策略是一致的。
就是说:若你不显式的说明,缺省是禁止的。
3.只读权限带来的一个小副作用
若设置了::
[arm:/diary]
* = r
则Subversion会认为,任何人都不允许改动diary目录,包括删除、**改名**,和**新增**。
也就是说,如果你在项目初期创建目录时候,一不小心写错目录名称,比如因拼写错误写成dairy,以后除非你改动authz.conf里面的这行设置,否则无法利用svn mv命令将错误的目录更正。
4. anon-access属性对目录权限的影响(我遇到过这个问题)
你想将你的代码库开放给所有人访问,于是你就开放了匿名访问权限,在svnserve.conf文件中添加一行:``anon-access=read``。可是对于部分目录,你又不希望别人看到,于是针对那些特别目录,你在authz.conf里面进行配置,添加了授权访问的人,并添加了``* =``标记。你认为一切OK了,可是你缺发现,那个特别目录却无法访问了,总是提示``Not authorized to open root of edit operation``或者``未授权打开根进行编辑操作``。你再三检查你配置的用户名与密码,确认一切正确,还是无法解决问题。
原来,Subversion有个小bug,当``anon-access=read``并且某个目录有被设置上``* =``标记,则会出现上述问题。这个bug在当前最新版本上(v1.4)还存在,也许在下一版本内可以被改正吧。
解决的办法是,在svnserve.conf中,将anon-access设置成none。
改进
====
对中文目录的支持
----------------
上午上班的时候,Morson来到Michael的桌子前面,说道:“你是否可以将我们的北京办、上海办目录,改成用中文的,看着那些拼音我觉得很难受?” Michael心想,还好这两天刚了解了一些与unicode编码相关的知识,于是微笑地回答:“当然可以,你明天下午就可以看到中文目录名称了。”
1.使用svn mv指令,将原来的一些目录改名并commit入代码库,改名后的目录结构如下::
arm
├─工作日志
│ ├─总部人员
│ ├─北京办
│ └─上海办
├─公司公共文件参考目录
└─临时文件存放处
2.修改代码库的authz.conf文件,将相应目录逐一改名
3. UTF-8格式的authz.conf文件,以及BOM
将配置文件转换成UTF-8格式之后,Subversion就能够正确识别中文字符了。但是这里需要注意一点,即必须保证UTF-8文件不包含BOM。BOM是Byte Order Mark的缩写,指UNICODE文件头部用于指明高低字节排列顺序的几个字符,通常是``FF FE``,而将之用UTF-8编码之后,就是``EF BB BF``。由于UTF-8文件本身不存在字节序问题,所以对UTF-16等编码方式有重大意义的BOM,对于UTF-8来说,只有一个作用——表明这个文件是UTF-8格式。由于BOM会给文本处理带来很多难题,所以现在很多软件都要求使用不带BOM的UTF-8文件,特别是一些处理文本的软件,如PHP、UNIX脚本文件等,svn也是如此。
目前常用的一些文本编辑工具中,MS Windows自带的“记事本”里面,“另存为”菜单保存出来的UTF-8格式文件,会自动带上BOM。新版本UltraEdit提供了选项,允许用户选择是否需要BOM,而老版本的不会添加BOM。请各位查看一下自己常用的编辑器的说明文件,看看它是否支持这个功能。
对于已经存在BOM的UTF-8文件,比如说就是微软“记事本”弄出来的,我们可以利用UltraEdit来将BOM去掉。方法是,首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到UTF-8即可。当然,这么操作之前,你肯定得先保证,你的UltraEdit保存出来的UTF-8文件的确是不带BOM的。
Subversion为什么讨厌BOM呢?我不知道,毕竟我也只是一个普通用户,不是开发人员。如果你感兴趣,并且英文够好的话,不妨参考一下这个讨论:http://subversion.tigris.org/ser ... ers&msgNo=51334
- 浏览: 319039 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (352)
- Eclipse (18)
- Python (27)
- Linux (15)
- Effective Java (54)
- Java解惑 (29)
- C语言 (24)
- 设计模式 (13)
- 并发编程 (14)
- 网络 (6)
- 数据库 (6)
- Android框架揭秘 (1)
- Java的NIO (7)
- Java泛型 (9)
- SVN/svnkit (1)
- Socket编程 (4)
- 词法语法解析 (1)
- 程序在生活中 (1)
- 工具的使用 (4)
- C# (1)
- SVN (25)
- SWT (24)
- XML (4)
- ikvm (5)
- WebService (7)
- Hibernate (5)
- GEF (1)
- 排序算法 (9)
- 剑指offer (2)
- 小小算法 (7)
- 深入理解Java虚拟机 (6)
- 操作系统 (3)
- 笔试面试 (2)
- Apache (1)
- JavaScript (2)
- Hadoop&HBase&Zookeeper (16)
最新评论
-
yjq8116:
getString 这个方法你有没有试过,是错误的。这段代码被 ...
ByteBuffer和String的互相转换 -
OnlyForJava:
博主,友情的提醒下,你的Ubuntu写错了
Ubutun上配置hadoop,hbase,zookeeper环境并安装
发表评论
-
关于SVN配置文件的一个小例子
2014-01-06 16:36 5281背景假设 厦门央瞬公 ... -
一些SVNkit的好博客
2014-01-06 16:36 567http://xiangxji.iteye.com/categ ... -
SVN的命令行操作
2014-01-06 16:37 984最近在进行svn二次开发,使用的是svnkit。看了很多sv ... -
转:svn命令行操作
2014-01-06 16:37 1033原文:http://zhumeng8337797.blo ... -
SVN的命令解析(感觉不错就转了)
2014-01-06 16:37 624本文链接: http://www.php-oa.com/ ... -
SVN的log,cat,list,diff的使用
2014-01-06 16:37 1188svn log展示给你主要信息:每个版本附加在版本上的作者与 ... -
SVN冲突解决详解
2014-01-06 16:37 445在:http://blog.csdn.net/windone0 ... -
SVN常见问题及解决方案
2014-01-06 16:37 18991. 隐藏文件.svn目录删除了怎么办 Checkou ... -
Eclipse中的SVN的冲突解决方案详解
2014-01-06 16:37 741版本冲突原因: 假 ... -
SVNKIT一段代码的分析
2014-01-06 16:37 859打印SVNkit版本库中的结构: 函数如下: 调用方 ... -
SVN的CheckOut操作和Export操作的区别
2014-01-06 16:37 964SVN中检出和导出的区别: -
SVN 的revert操作
2014-01-06 16:37 1100SVN的revert操作: -
SVN中正确的add操作和delete操作
2014-01-06 16:37 783add操作: delete操作: -
使用SVNkit删除版本库的文件
2014-01-06 16:37 1591源网址:http://wiki.svnkit.com/Com ... -
利用SVNKit进行版本库的树的导出
2014-01-06 16:37 434public List searchByTree(Str ... -
sharpSVN说明文档
2014-01-06 16:37 814http://sharpsvn.open.collab.ne ... -
搜索树SVN的树的时候遇到的乱码问题
2014-01-06 16:38 367public void listDirectoryNod ... -
svnkit添加节点
2014-01-06 16:38 421package com.repositoryclient ... -
SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
2014-01-06 16:38 1149弄了很久,想使用domove这个操作,但是都失败了。最后 ... -
SVN的switch命令
2014-01-06 16:38 1130语法就不说了,文 ...
相关推荐
【MyEclipse SVN配置文件详解】 在软件开发过程中,版本控制系统是不可或缺的工具,Subversion(SVN)作为其中的一员,被广泛应用于协同开发和代码管理。MyEclipse,一个强大的Java集成开发环境,集成了SVN插件,...
### SVN配置详解 #### 一、SVN简介与配置背景 Subversion (简称SVN) 是一种开源版本控制系统,主要用于代码版本管理。它通过记录文件和目录的变化来帮助团队成员协同工作,支持分布式开发和非线性开发模式。本文档...
- 编辑Apache的配置文件(如httpd.conf),设置SVN仓库的路径、访问控制和认证方式。你可以使用基本认证或更安全的SSL/TLS认证。 4. **启动Apache服务**: - 重启Apache服务器,使配置生效。 在客户端配置方面,...
svn目录权限设置详解 随着软件开发的日益复杂,版本控制系统的重要性变得更加明显。Subversion(SVN)是一种流行的版本控制系统,能够帮助开发者 efektively 管理项目的版本变更。但是,SVN的权限设置一直是开发者...
本篇文章将深入探讨“svn配置”这一主题,帮助读者理解如何在项目开发中有效地利用SVN来管理和协同代码。 SVN是一个开源的版本控制系统,它允许开发者追踪和控制文件及目录的变化,同时提供了多人协作的环境。对于...
Subversion(SVN)是一个版本控制系统,它用于管理文件和目录的变化。SVN是CVS(Concurrent Versions System)的后继者,并且它是一个开源的软件版本管理工具,被广泛用于软件开发中以协助代码的版本控制。它在管理...
- **conf**: 包含配置文件。 - **licenses**: 包含许可证文件。 #### 常见问题与解决方案 **Q1: 安装过程中遇到错误提示怎么办?** - 查看错误提示的具体内容,尝试在网上搜索解决方案。 - 检查系统是否满足SVN...
SVNManager 配置详细说明文档 SVNManager 是一个基于 Web 的 SVN 管理软件,旨在提供一个统一的平台 для管理 SVN 仓库和控制访问权限。该软件基于 SVN 核心,结合 Apache 和 PHP,提供了一个完整的 SVN 管理解决...
9. 配置svn权限:我们需要修改一下权限配置文件,例如将anon-access = read改为anon-access = write。 10. 导出项目:其他的开发人员可以从工厂中导出已有的项目,右键——>SVN Checkout,出现下面的对话框点击ok,...
### SVN配置管理详解 #### 一、概述 版本控制系统(Version Control System,VCS)是软件开发中不可或缺的一部分,它帮助团队有效地管理源代码的变化历史。Subversion(SVN)作为一款集中式的版本控制系统,被广泛...
4. **配置Trac与SVN的集成**:通过Trac的配置文件设置SVN仓库的路径,实现Trac与SVN的无缝对接。 通过以上步骤,我们可以成功搭建一套集版本控制、问题跟踪和协作文档于一体的开发环境。这对于提升开发效率、加强...
**SVN配置管理工具——TortoiseSVN详解** TortoiseSVN是一款深受开发者喜爱的版本控制系统,它基于Subversion(SVN)系统,专为Windows用户设计,提供了友好的图形用户界面。在开发环境中,SVN是进行源代码管理、...
### SVN配置详解 #### 1. 版本控制与Subversion简介 版本控制是一种软件工程实践,用于跟踪和管理文件及目录的历史变更记录。通过版本控制系统,开发人员能够记录每一个微小的更改,确保在遇到问题时能够快速回滚...
3. 文件类型:Subversion不仅限于存储文本文件,它可以处理任何类型的文件,包括二进制和Unicode文件,无需额外配置。 4. 文件属性:Subversion允许为每个文件设置任意多的可命名属性,增强了灵活性。 5. 回滚策略:...
**Subversion(SVN)安装及详解** Subversion(简称SVN)是一种版本控制系统,用于管理文件和目录的变更历史,特别适用于多人协作的软件开发项目。它允许开发者跟踪和控制代码的修改,同时提供了冲突解决机制,确保...
1. **URL 错误提示**:“svnserve.conf:12: Option expected” —— 此错误通常出现在配置文件的第 12 行,检查该行是否有语法错误或配置选项缺失。 2. **版本库不存在提示**:“svn://127.0.0.1/SVN_PRJ non-...
### SVN配置管理使用教程知识点详解 #### 一、SVN简介 **SVN**(Subversion)是一种开源的版本控制系统,它的出现旨在解决软件开发过程中的版本控制难题。SVN继承了早期版本控制系统**CVS**(Concurrent Versions ...