Windows下Subversion配置管理
准备软件
Subvertion1.4.4+tortoiseSVN1.4.4
运行环境Windows2003+sp1
sc create svnservice binpath= "/"C:/program files/Subversion/bin/svnserve.exe/" --service -r D:/svnroot" displayname= "SVNService" depend= Tcpip
1,安装svnservice
在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
上面的命令分为多行,但在实际执行时应该在一行里。另外,在以前启动svnserve时会使用"-d"选项,也就是守护进程模式,在这里不能使用,会导致服务无法启动。
在命令行窗口执行完这个命令之后,服务还没有启动,你可以继续运行"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”,也就是“=”前不能有空各,而后面必须有空格。
2,删除服务
如果服务安装的有问题,你可能需要删除服务。要删除前面添加的服务,只需要运行 "sc delete svnservice", "svnservice" 就是我们创建服务时使用的名字。
3,配置服务自动启动
默认情况下安装的服务不会随Windows的启动而启动,为了使svn服务能够随Windows启动而启动,需要修改一下"sc create"命令(首先要删除),增加"start= auto"选项:
sc create svnservice
binpath= "D:/Subversion/bin/svnserve.exe --service -r D:/svnroot"
displayname= "SVNService"
depend= Tcpip
start= auto
你可以在“开始->运行...”中执行"services.msc",然后在界面中修改。
4,Subversion的权限控制
svnserve下的配置文件
D:/SVNROOT/PROJECT1
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
在conf目录下有三个文件authz,passwd,svnserve.conf
其中的“svnserve.conf”是这个版本库的配置文件,当使用svnserve时,这个配置文件决定了使用什么认证和授权文件
password-db = passwd
authz-db = authz
对于管理多个不同的版本库,使用svnserve时,为了管理的方便,应该使用相同的认证和授权文件,所以应该让所有版本库的配置文件svnserve.conf指向同一个password-db和authz-db文件。下面是一个多版本库的目录:
C:/SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
Project1和project2是两个不同的版本库,它们有着相同的文件结构,如果要统一管理,我们可以将它们的验证和认证文件指到一个相同的地方;在C:/SVNROOT目录下拷贝authz和passwd,修改两个版本库的svnserve.conf文件,使其验证文件都指到C:/SVNROOT下的authz和passwd,
password-db = ../../passwd
authz-db = ../../authz
修改passwd文件添加新的用户,格式为:用户名=密码 例如:user1=user1
[users]
user1=user1
user2=user2
user3=user3
user4=user4
user5=user5
user6=user6
修改authz文件可以为用户赋予相应的访问权限
[groups]
# 定义组信息
group1 = user1
group2 = user2
group3 = user3
group4 = user4
group5 = user5
group6 = user6
[/]
# 指定所有的版本库默认只读,root可读写
* = r
root = rw
[project1:/]
# 指定对版本库project1根目录的权限
@group1 = rw #读写
@group2 = r #读
[project1:/trunk]
# 指定对版本库project1的/trunk根目录的权限,
@group2 = rw
@group3 = r
如果希望管理的目录结构中包含有中文目录,使用UltraEdit-32 13.10a将authz文件另存为UTF-8 无 BOM格式,SVN就可以对中文目录进行权限管理了!例如:
[groups]
# harry_and_sally = harry,sally
group1 = user1
group2 = user2
group3 = user3
group4 = user4
group5 = user5
group6 = user6
[/]
* = r
root = rw
[project1:/]
@group1 = rw
@group2 = r
[project1:/01项目]
@group2 = rw
@group3 = r
[project1:/01项目/会议纪要]
@group3 = rw
@group4 = r
[project1:/03私有分支]
@group4 = rw
@group5 = r
[project2:/]
@group1 = rw
@group2 = r
[project2:/09发布包]
@group2 = rw
@group3 = r
[project2:/09发布包/V1.0]
@group3 = rw
@group4 = r
这样我们根据设定的权限在客户端检入检出的时候就可以针对不同的中文目录进行操作。