记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

subversion配置及权限管理

1、工具准备及安装:
        1)Subversion下载地址:http://subversion.tigris.org 其中setup-Subversion-1.6.31.msi为安装版本,svn-win32-1.6.3为绿色免安装版本。
        Windows常用客户端TortoiseSVN下载地址:http://tortoisesvn.net/downloads
       2)安装subversion和tortoiseSVN
默认安装即可。

2、安装svnservice
     以前的svnserve要想成为windows服务,必须依赖于svnservice或其他工具。从Subversion1.4开始,Subversion本身就集成Windows服务的工具。
     在Windows NT中(包括Windows XP, Windows 2000, Windows 2003 Server)本身包含了一个安装服务的工具,叫做"Service Control",也就是sc.exe。
        例如我的Subversion安装在"D:"Subversion",版本库(资源文件存放的总目录)在"D:"svnroot",而我希望对应的Subversion服务名为svnservice,安装这个svn服务的命令就可以这样写:

sc create svnservice binpath= "D:"Subversion"bin"svnserve.exe --service -r D:"svnroot" displayname= "SVNService" depend= Tcpip

        在命令行窗口执行完这个命令之后,服务还没有启动,你可以继续运行"net start svnservice"启动这个服务,然后使用"net stop svnservice"停止服务。

        注意:另外还有两点需要小心处理。首先,如果路径中包括空格,一定要用“"”处理“"”号,例如上面的例子中如果svnserve.exe在“c:"program files"subversion"”中,则命令应该写为“binpath= """c:"program files"subversion"bin"svnserve.exe""”(“”中的内容),整个命令如下:

sc create svnservice binpath= """D:"program files"Subversion"bin"svnserve.exe"" --service -r D:"svnroot" displayname= "SVNService" depend= Tcpip

        其次,sc对选项的格式还有要求,例如“depend= Tcpip”不能写为“depend = Tcpip”或“depend=Tcpip”,也就是“=”前不能有空各,而后面必须有空格。

        删除服务
        如果服务安装的有问题,你可能需要删除服务。要删除前面添加的服务,只需要运行"net start svnservice","svnservice"就是我们创建服务时使用的名字。

3、创建资源库
        方法一:多资源库:打开命令提示符,输入svnadmin create D:"svnroot " project1,回车;输入svnadmin create D:"svnroot " project2,回车...

        方法二:安装好tortoiseSVN后,可以选中资源文件夹,如project1,右键,选择tortoiseSVN---create repository here即可。

        资源库目录如下:

D:"SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks

        导入资源(可选操作)
         例如将F:"resources下资源导入到project1中,在resources目录上右键,选择tortoiseSVN>import,之后选择D:"SVNROOT即可。

4、Subversion的权限控制
        D:"SVNROOT下有两个目录project1和project2,都已经创建了版本库,所以我们修改每个conf目录下的svnserve.conf,使之指向同一个password-db和authz-db文件。
        password-db = ..".."passwd
     authz-db = ..".."authz
       这样,D:"SVNROOT"passwd和D:"SVNROOT"authz就控制了所有版本库的svnserve访问。将任一个conf目录下的passwd和authz文件拷贝到SVNROOT目录下。
        另外在后面的操作中要关闭匿名访问,应该去掉“anon-access = none”前的“#”号,保证只有认证用户可以访问。
        注意:还有一点需要注意,那就是svnserve的“realm”的值,在上面的设置下,应该保证所有的版本库使用相同的realm值,这样,对版本库的密码缓存可以在多个版本库之间共享,更多细节见客户端凭证缓存。

        配置用户和组说明:
        假设project2目录下仍有目录111和222目录
        root:配置管理管理员,对版本库有完全的管理权限
        project1_a:对project1有完全权限
        project1_b:同上
        project1_c:同上
        project2_a:对project2有完全权限
        project2_b:对project2文件夹下的111目录只有读权限,对222目录没有权限
        修改D:"SVNROOT"passwd文件

       前面已经说过了,用户和密码文件应该是在D:"SVNROOT"passwd,所以我们为每一位用户设置权限,文件内容如下:

[users]
project1_a = project1_a
project1_b = project1_b
project1_c = project1_c
project2_a = project2_a
project2_b = project2_b
       即为每一个用户设置用户名和密码,左侧为用户名,右侧为密码(为方便,密码同用户名)。

        配置授权
     
修改D:"SVNROOT"authz
[groups]
# 定义组信息,左侧为组名,右侧为改组成员的用户名
group_project1 = project1_a, project1_b, project1_c
group_ project2_a = project2_a
group_ project2_b = project2_b
[/]

# 指定所有的版本库默认只读,root可读写
* = r
root = rw
[project1:/]
# 指定对版本库project1根目录的权限
@ group_project1 = rw
[project2:/]
# 指定对版本库project2根目录的权限
@ group_ project2_a = rw
[project2:/111]
# 指定对版本库project1的/111根目录的权限
@ group_ project2_b = r
[project2:/222]
# 指定对版本库project1的/222根目录的权限
@ group_ project2_b =


(注:当没有权限时,该用户将看不到次目录)

5、使用tortoiseSVN客户端工具访问
         在某一个目录下右键SVN Checkout即可,路径为svn://127.0.0.1/ project1,确定后输入用户名和密码


转载请标明出处【windows 系统subversion配置及权限管理】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论