一、安装svn
yum -y install subversion
2.安装完成后创建仓库
svnadmin create /xx科技
cd /xx科技 ,到仓库目可以看到下面的配置文件
cd /conf 目录
编辑svnserve.conf主配置文件,对以下几项修改如下
[general]
anon-access = none #取消匿名访问
auth-access = write #授权用户有可写权限
password-db = passwd #指定用户配置文件,后面会用到
authz-db = authz #指定权限配置文件,后面会用到
编辑passwd文件,建立svn客户端用户以及密码:
[users] yangfen = 951340 yangzi = 567452 caoweitao = 273621 chenfei = 169673
编辑authz,配置用户组和权限:
组:
[groups] 总经办 = yangzi 市场运营部 = yangfen IT开发部 = caoweitao,chenfei
权限:
[xx科技:/] @总经办 = rw [xx科技:/总经办] @总经办 = rw * = [xx科技:/市场运营部] @总经办 = rw @市场运营部 =
rw * = [xx科技:/IT中心] @总经办 = rw @IT开发部 = rw @IT产品部 = rw @IT数据部 = rw * =
[xx科技:/IT中心/IT开发部] @总经办 = rw @IT开发部 = rw * =
对于多级目录的分析:
[xx科技:/IT中心/IT开发部] @总经办 = rw @IT开发部 = rw * =
这里最后一行的 ``* =`` 表示,除了指定组总经办、IT开发部的人员之外,任何人都被禁止访问本目录。这一行是否可以省略呢?不行,因为
**权限具备继承性** ,子目录会自动拥有父目录的权限。若没有这一行,则拥有"IT中心"目录读取权限的人都可以读取 "/IT中心/IT开发部"
目录下的文件。假如我们并没有设置这个目录的父目录权限,可是默认的规则使得 "IT中心" 目录的权限与根目录完全一样。所以简单来说, ``* =``
这一句的目的,就是割断权限继承性,使得管理员可以定制某个目录及其子目录的权限,从而完全避开其父目录权限设置的影响。
在前面的描述中,我们都采用 ``[repos:/some/dir]`` 这样的格式来表示项目的某个目录,比如 ``[xx科技:/总经办]``
。而实际上,Subversion允许你采用 ```[/some/dir]`` 这样的格式,即不指定代码库的方式来表示目录,此时的目录就匹配所有项目。
对于使用 svnserve 的用户来说,只有当 svnserve 运行的时候使用了 ``-r`` 参数,并且让多个代码库共享同一个目录权限文件(即
authz.conf 或
authz)时,不指明代码库名称才有可能惹麻烦。一般情况下,我们对每个代码库都会独立使用配置文件,毕竟每个项目的目录结构,都有很大不同,混在一起意义不大。因此一般来说,为简洁起见,都可以不指明代码库名称。本文全都指明了代码库名称,主要是为了将来扩展成同一个配置文件,以方便配合
Apache 服务器。
对于使用 Apache 的用户来说,它们二者可有着很大的不同,因为此时往往习惯于使用一个公共的目录权限配置文件。如果你使用了
SVNParentPath 指令,则指定版本库的名字是很重要的,因为假若你使用后者,那么 ``[/some/dir]``
部分就会与所有代码库项目的``[/some/dir]`` 目录匹配。如果你使用 SVNPath 指令,则这两种表示方式就没有什么区别了,毕竟只有一个版本库。
3.父目录的 ``r`` 权限,对子目录 ``w`` 权限的影响
在1.3.1及其以前的版本里面,有个bug,即某个帐号为了对某个子目录具备写权限,则必须对其父目录具备读权限。因此现在使用了1.3.2及其更高的版本,就方便了那些想在一个代码库存放多个相互独立的项目的管理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做
diary,而SVN事业部只是其中一个部门,则可以这样做::
[diary:/]
@g_chief_manager = rw
[diary:/SVN]
@g_SVN_manager = rw
@g_SVN = r
这样,对于所有SVN事业部的人员来说,就可以将svn://192.168.0.1/diary/SVN
这个URL当作根目录来进行日常操作,而完全不管它其实只是一个子目录,并且当有少数好奇心比较强的人想试着 checkout 一下
svn://192.168.0.1/diary 的时候,马上就会得到一个警告“Access denied”。
热门工具 换一换