首页  >> 配置管理  >> CVS/SVN
SVN 初学者用实例经验 转贴
作者 kingyu103   查看 464   发表时间 2008/9/3 14:31  【论坛浏览】
Svnserve单项目权限设置ozijvibvoq
目录ozijvibvoq
Svnserve单项目权限设置1ozijvibvoq
目录1ozijvibvoq
前言1ozijvibvoq
一 项目结构2ozijvibvoq
二 建立版本库2ozijvibvoq
三 配置权限3ozijvibvoq
四 导入项目版本库5ozijvibvoq
五 启动svnserve9ozijvibvoq
六 将svnserve设置为系统服务9ozijvibvoq
1,安装svnservice9ozijvibvoq
2,删除服务9ozijvibvoq
3,配置服务是自动启动10ozijvibvoq
致谢10ozijvibvoq
ozijvibvoq
前言ozijvibvoq
目前网络上有很多的关于svn安装与权限设置的文章(基于SVN自带的svnserve),但是如果您像我一样按照那些文章来进行我们的subversion的安装和设置会发现有很多问题,可以说每篇文章都有这样或那样的错误。或者断章取义,或者根本就没亲自验证就写出来,贴到网络上,然后又有很多人直接转帖到自己的博客,空间中。这就造成了网络上大量的权限设置文章根本是无法正确设置权限的。在学习那些“权限设置精细”文章的过程中,给我们的身心都造成了严重的伤害。至少给我幼小的心灵造成了创伤。每次上网搜到一篇文章都觉得这次总该可以了吧,结果全盘照抄了,还是不行。累的我真的想放弃了。还好后来有一篇文章给了我启发,那是我找过的唯一一篇有我需要的细节的文章。ozijvibvoq
这篇文章是专门写给像我一样的菜鸟,而又因为这样或那样的原因需要了解svnserve权限设置的人,也就是“侏儒”。如果您对windows比较了解,也就是身高在1.5米以上的,偏矮的人,正常人,比较高的人,非常高的人,或者像姚明一样的巨人的话,那你会发现此篇文章极尽啰嗦,繁琐。对此我深表歉意!ozijvibvoq
一 项目结构ozijvibvoq
亿联网络技术有限公司是一家专注于网络通讯产品的研发及销售的高科技企业。目前,公司主要致力于VoIP网关、VoIP终端、WIFI和IP-PBX等网络通讯产品的开发、生产和销售。产品以出口为导向,95%产品远销英国、德国、美国、韩国等50多个国家与地区,拥有一批诸如Nortel、FranceTelecom, Skype等优质合作伙伴ozijvibvoq
ozijvibvoq
资料库的目录结构如下:ozijvibvoq
ref 项目名称ozijvibvoq
├─department 存放每个部门资料ozijvibvoq
│ ├─hardware 硬件资料目录ozijvibvoq
│ ├─embedded 嵌入式资料目录ozijvibvoq
│ └─PC PC软件资料目录ozijvibvoq
├─com研发部均可读的公共资料ozijvibvoq
└─temp 临时文件ozijvibvoq
人员情况与权限需求分析:ozijvibvoq
Stonelu,公司副总,研发中心最大的“官”,毫无疑问当然需要访问所有的目录了,虽然可能他不太有时间查看那些个资料,但是权限还是得给人家设在那的嘛,谁叫人家是老大呢。 Nancy,项目经理,研发中心的第二把交椅,访问所有目录,查看项目进度也是理所当然的,对整个资料库具有读写权限。 wxz,硬件部经理,需要对硬件部目录有读写权限。 Ly,硬件部职员,对硬件部资料可读写。 wwt,嵌入式经理,对嵌入式可读写。 tjy,嵌入式员工,对嵌入式资料可读写。 azm,PC部经理,对PC资料库可读写。 ljp,PC部员工,对PC部可读写。 Com文件夹下的文件,nancy可读写,其余员工可读。 Temp文件夹下的文件,全体员工可读写。ozijvibvoq
二 建立版本库ozijvibvoq
在服务器D盘目录下(也可在本机,并且盘符可自由选择),新建svn文件夹,再在svn下新建ref文件夹。(文件夹名称可自行设定)ozijvibvoq
然后,创建版本库:ozijvibvoq
第一种方式:在DOS命令行中运行svnadmin create D:\svn\refozijvibvoq
第二种方式:鼠标右键单击ref,选择[TotoiseSVN]->[在此创建版本库...]进行创建,默认“本地文件系统(FSFS)”,点击确定,完成创建。ozijvibvoq
三 配置权限ozijvibvoq
编辑版本库D:\svn\ref\conf\svnserve.conf文件,如下:ozijvibvoq
[general]ozijvibvoq
anon-access = none#保证只有认证用户可以访问,即关闭匿名访问ozijvibvoq
auth-access = write#通过认证的使用权限ozijvibvoq
password-db = passwd#指定了用户密码文件ozijvibvoq
authz-db = authz#指定了授权文件ozijvibvoq
realm = ref#客户端凭证缓存ozijvibvoq
ozijvibvoq
编辑版本库D:\svn\ref\conf\passwd文件,如下:ozijvibvoq
[users]ozijvibvoq
stonelu = stonelu # ”=” 前为帐号,后为密码ozijvibvoq
nancy = nancyozijvibvoq
wxz = wxzozijvibvoq
ly = lyozijvibvoq
wwt = wwtozijvibvoq
tjy = tjyozijvibvoq
azm = azmozijvibvoq
ljp = ljpozijvibvoq
编辑版本库D:\svn\ref\conf\authz文件,授权如下:ozijvibvoq
[groups]ozijvibvoq
g_vip = stoneluozijvibvoq
g_manager = nancyozijvibvoq
g_hardware = wxz,lyozijvibvoq
g_embedded = wwt,tjyozijvibvoq
g_pc = azm,ljpozijvibvoq
g_common = stonelu,wxz,ly,wwt,tjy,azm,ljpozijvibvoq
[/] #根目录的权限ozijvibvoq
* = #全体员工对根目录无权限ozijvibvoq
@g_manager = rw #项目经理对根目录具有读写权限ozijvibvoq
@g_vip = rozijvibvoq
[/ref/]ozijvibvoq
@g_manager = rwozijvibvoq
@g_vip =rozijvibvoq
* = ozijvibvoq
[/ref/department/hardware]ozijvibvoq
@g_manager = rwozijvibvoq
@g_hardware = rwozijvibvoq
@g_vip = rozijvibvoq
* = #可加可不加,因为不显示设定权限,即表示没权限ozijvibvoq
[/ref/department/embedded]ozijvibvoq
@g_manager = rwozijvibvoq
@g_embedded = rwozijvibvoq
@g_vip = rozijvibvoq
[/ref/department/pc]ozijvibvoq
@g_manager = rwozijvibvoq
@g_pc = rwozijvibvoq
@g_vip = rozijvibvoq
[/ref/com]ozijvibvoq
@g_manager = rwozijvibvoq
@g_common = rozijvibvoq
[/ref/temp]ozijvibvoq
@g_manager = rwozijvibvoq
@g_common = rwozijvibvoq
附: ozijvibvoq
1. #号表示注释。以上每个文件夹权限设置中对每个组与用户的权限设置顺序可调换,如:ozijvibvoq
根目录的设置也可以写成:ozijvibvoq
[/]ozijvibvoq
@g_manager = rwozijvibvoq
@g_vip = rozijvibvoq
* =ozijvibvoq
2. 文件夹权限具有向后继承,但不具有向前效应。简言之就是权限具备继承性,任何子目录,均可继承其父目录的所有权限,除非它自己已被明确设置了其他的权限。如本例:为g_manager设置了根目录“[/]”的读写权限,则根目录下的文件g_manager均具有读写权限。但是在该目录的下一级目录,如:“[/ref/]”为其他用户设置了权限,把默认访问权限设为了可读,(在根目录,默认是不可访问)必须也加上g_manager = rw,否则g_manager在“[/ref/]”中跟其他用户一样也是可读权限。ozijvibvoq
3. 我们发现wwt这个帐号同时存在“g_embedded”和“g_common”两个分组里面,这是因为 svnserve.exe 允许我们这样设置。ozijvibvoq
4. [/ref/] 表示这个目录结构的相对根节点,或者说是ref资料库的根目录。设置权限时“@”表示组名,设置的是整个组的权限,如果该组只有一个用户,则可将“@组名”替换为“用户名”如:你可以将“@g_manager = rw”替换为“nancy = rw” 。ozijvibvoq
5. 如果设置了可读写权限,则在稍后的操作中,我们可以从版本库更新我们的工作拷贝,也可以提交修改;如果设置了可读权限,则只有更新工作拷贝,不能提交修改,如果您提交了,将会得到“Access deny”警告,也就是禁止提交修改。ozijvibvoq
6. 如果一个目录下有多库,则文件夹目录写法有点不一样。如本例中的[/ref/],应该改写为[ref:/]。但是要是您也是像本例这样只想创建单库单项目的话,则按上面的操作即可。ozijvibvoq
7. 如果像本例这样的单库单项目也照网络上大多数的文章那样,把目录写成[ref:/],则会造成严重的权限问题。主要的问题有:1. 如果根目录没设可读权限,则对所有文件都没可读权限.2. 而如果对根目录设置了可读权限,则对根目录下的所有文件都具有了可读权限。这样就造成了普通员工的权限只有两种可能:要不对所有文件都没有权限;(这肯定不是我们要的)要不就对整个项目库具有可读权限。(造成严重的安全漏洞,毕竟某些关键内容,我们并不希望太多人看到)本人在设置权限时就因这个问题而浪费了很多时间,伤透了脑筋。ozijvibvoq
四 导入项目版本库ozijvibvoq
在本机D:\temp目录下,建立好上述资料库的目录结构,鼠标右键单击temp,选择[TotoiseSVN]->导入,如下图所示: ozijvibvoq
弹出对话框:ozijvibvoq
1. 版本库在本机上安装,并且假设你电脑的IP地址为:192.168.0.125(当然这个是我在公司的IP地址),则在“版本库URL:”中输入“svn://localhost/ref”或“svn://192.168.0.125/ref”等效。2. 版本库在服务器上安装:假设服务器的IP地址为:192.168.1.2,则在地址栏中输入:svn://192.168.1.2/ref 。ozijvibvoq
在“最新信息”里,可依您的兴趣填写,你可写您喜欢的女孩的名字,如果刚好是您心情郁闷时,也可写”F”开头的英文词。当然如果是直接拿来版本控制,则最好填写”import”之类比较切合实际的词组或语句。如下图:ozijvibvoq
ozijvibvoq
此时你可以打开IE或文件夹,在地址栏中输入下面的任意一个:ozijvibvoq
①svn://192.168.0.125/ref ②svn://127.0.0.1/ref ③svn://localhost/ref 此时你可以打开IE或资源管理器的地址栏,甚至运行中输入上述三种方式之一,即可打开如下对话框: ozijvibvoq
ozijvibvoq
输入用户名和密码,可勾上“保存认证”,免去每次输密码的麻烦,得到如下对话框:ozijvibvoq
ozijvibvoq
上图是对ref目录有权限的用户显示出来的结果,如果您对ref目录没有可读权限,则结果不一样。如:您输入的用户是ljp,则显示如下: ozijvibvoq
ozijvibvoq
说明ljp对ref没有可读权限。当然了,ljp用户对ref/department/pc下的文件是有权限的,我们可在上图的URL中的ref后面加上/department/pc,或者关闭上图,在地址栏中输入:svn://127.0.0.1/ref/department/pc再输入密码,显示如下:ozijvibvoq
ozijvibvoq
我们可在“pc”点右键,选择“创建文件夹”,输入文件名“test”,可以看到test文件夹已添加到pc下面。刚好也验证了我们设置的权限是正确的。Ljp能对pc下的文件进行读写操作。ozijvibvoq
五 启动svnserveozijvibvoq
打开“开始->运行”输入“cmd”,打开命令行窗口,输入:svnserve –d –r D:\svn\ref,即可启动svnserve。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。这样每次开机都得手动启动服务。“那有没有更好的办法呢?”(好白痴的问题)。如果想省去每次开机都得自己手动启动svnserve的麻烦,我们可以把它设为系统服务。ozijvibvoq
六 将svnserve设置为系统服务ozijvibvoq
1,安装svnserviceozijvibvoq
在Windows NT中(包括Windows XP, Windows 2000, Windows 2003 Server)本身包含了一个安装服务的工具,叫做"Service Control",也就是sc.exe。ozijvibvoq
例如我的Subversion安装在"D:\Subversion",版本库在"D:\svnroot",而我希望对应的Subversion服务名为svnservice,安装这个svn服务的命令就可以这样写:ozijvibvoq
sc create svnserviceozijvibvoq
binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnroot"ozijvibvoq
displayname= "SVNService"ozijvibvoq
depend= Tcpipozijvibvoq
请注意,因为便于察看,上面的命令分为多行,但在实际执行时应该在一行里。另外,在以前启动svnserve时会使用"-d"选项,也就是守护进程模式,在这里不能使用,会导致服务无法启动。同样,"-i"和"-t"选项也不能使用。ozijvibvoq
在命令行窗口执行完这个命令之后,服务还没有启动,你可以继续运行"net start svnservice"启动这个服务,然后使用"net stop svnservice"停止服务。ozijvibvoq
另外还有两点需要小心处理。首先,如果路径中包括空格,一定要用“\”处理“"”号,例如上面的例子中如果svnserve.exe在“c:\program files\subversion\”中,则命令应该写为“binpath= "\"c:\program files\subversion\bin\svnserve.exe\"”(“”中的内容),整个命令如下,红色部分是改变部分:ozijvibvoq
sc create svnserviceozijvibvoq
binpath= "\"D:\program files\Subversion\bin\svnserve.exe\" --service -r D:\svnroot"ozijvibvoq
displayname= "SVNService"ozijvibvoq
depend= Tcpipozijvibvoq
其次,sc对选项的格式还有要求,例如“depend= Tcpip”不能写为“depend = Tcpip”或“depend=Tcpip”,也就是“=”前不能有空格,而后面必须有空格。ozijvibvoq
2,删除服务ozijvibvoq
如果服务安装的有问题,你可能需要删除服务。要删除前面添加的服务,只需要运行"sc delete svnservice","svnservice"就是我们创建服务时使用的名字。ozijvibvoq
3,配置服务是自动启动ozijvibvoq
默认情况下安装的服务不会随Windows的启动而启动,为了使svn服务能够随Windows启动而启动,需要修改一下"sc create"命令(首先要删除),增加"start= auto"选项:ozijvibvoq
sc create svnserviceozijvibvoq
binpath= "D:\Subversion\bin\svnserve.exe --service -r D:\svnroot"ozijvibvoq
displayname= "SVNService"ozijvibvoq
depend= Tcpipozijvibvoq
start= autoozijvibvoq
ozijvibvoq
当然你也可以使用图形化的工具修改服务的属性,你可以在“开始->运行...”中执行"services.msc",然后在界面中修改。ozijvibvoq
致谢ozijvibvoq
本文的完成是建立在各位前辈的基础上的,在此我要感谢写过svn安装,设置的文章的人,不管你们是“巨人”还是“侏儒”,或者你们写的文章是给我有很多帮助还是给我很多弯路,我都要感谢你们。就像我们既需要朋友,也需要对手一样。缺了朋友,我们会少了很多乐趣与欢笑;少了对手,我们会失去动力,发现不到自己的缺点,没有人给你痛苦,无奈,愤怒,你在心里再没有把某个人杀过千百遍的感觉。我相信光有欢笑的生活也是很无趣的生活。朋友就像一碗没有加盐的西红柿蛋汤,而对手就像是盐。没加盐的蛋汤,肯定不是我们喜欢的,但是盐加多了更不是我们想要的。(好像说过了。呵。。言归正传)ozijvibvoq
首先我要感谢中国svn联盟官方网站,其次,我要感谢郑新星,您写的是一篇蛮不错的文章,但是还是有一些细节问题,因这些问题,我也耗了不少时间。(当然也许我看的是你比较早写的文章,现在那些错误已经修改了),还有我要感谢一位不知名的大哥,你的文章里刚好有我要的单库的目录写法,给了我很大帮助,不然也许我现在还在茫然中,真的很抱歉,我不知道您的名字。当然还有其他许多负责任或不负责任的写过,贴过svn权限设置的人。如果已经有过很好的权限设置文章,那我学习svn的过程将非常顺利,这样也是很无趣并无成就感的事情。所以我要特别感谢给我弯路的同志,谢谢你们,没有你们就没有这篇文章。谢谢大家ozijvibvoq
当然我还要在此对所有看了此篇文章的初学者,说声“对不起”因为看了文章后,你会发现,用svnserve进行权限设置简单且无趣。没让感受到权限设置的烦恼,对此我深表歉意。ozijvibvoq
菜哥ozijvibvoq
2008-1-4ozijvibvoq
ozijvibvoq
[ 本帖最后由 CMStruggling 于 2008-9-14 18:34 编辑 ]

序号 评论者 共有评论 2   【论坛浏览】  【发表评论】 评论时间
1 kingyu103 以上内容
测试通过
2008/9/3 14:33
2 qunsheng_83 恩,谢谢楼主啦,我在本机上也用的这种方式做SVN服务器的 2008/9/3 15:42
 共有评论数 2  每页显示 10
页码 1/1  |<  <<   1   >>  >|