1、服务器端软件Subversion, 地址:http://subversion.apache.org/packages.html#windows
2、客户端软件TortoiseSVN , 地址:http://tortoisesvn.net/downloads.html
二、安装
1、服务器端
下载好服务器端软件后,双击运行安装程序,目录:F:\Program Files\Subversion\。
2、客户端
跟服务器端一样,下载好后双击,傻瓜安装。
三、建立本机Repository
Repository 即源码的集中存放处,所有修改后提交的源码就是保存在这里,并在其中记录所有的修改版本,分支版本,版本合并,以及并发修改处理等。比如我把源码库放在F:\svnroot\myproject(注意,确保不能删除),然后在此文件夹上右键,选择TortoiseSVN->Create repository here[这是在已经安装了TortoiseSVN 的前提下],也可以通过命令 svnadmin create F:\svnroot\myproject创建。
创建完后,在这个目录下会自动产生一些目录和文件,[注:svnroot相当于一个根目录,下面放很多项目;myproject即是某个项目名;每个项目都需要建立Repository] 如下图:
dav目录是提供给Apache与mod_dav_svn使用的目录,让它们存储内部数据;db目录就是所有版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号;
四、配置
配置只需要配置服务器端,并且是针对每个项目的。打开目录F:\svnroot\myproject\conf\,要更改的文件有三个:authz, passwd和svnserve.conf。注意,这三个文件配置时,去掉#后,行前面都不能有空格。
1、authz文件
创建用户组,比如group1,里面有三个用户user1, user2和user3,权限为rw即读写权限。
注:如果svnserve.conf文件中,你打开了authz-db = authz选项后,在这里,则必须把项目repository 添加至此。即添加[myproject:/]。
2、passwd文件,用来修改用户密码
这里三个用户的初始密码都设置为123。
3、svnserve.conf文件
需要更改的就是如下几行,把每行前面的注释#拿掉,如下图
改成:
注:realm要指定为我们的源码版本库,在这里为myproject。
五、运行和测试
可以用命令行svnserve.exe -d -r F:\svnroot,回车后没有什么反应,但是不能把命令行窗口关掉,如果关掉服务就终止了。启动服务后我们可以测试一下,打开一个文件浏览器,右键TortoiseSVN->Repo-browser,当然客户端程序TortoiseSVN要装好。
键入服务器端的Repository地址
单击OK,如果能看到如下窗口就证明安装配置成功了
这样就可以在客户端用前面配置的三个用户进行访问了,注意在其它机器上访问的时候要把127.0.0.1改成本机IP,关于客户端如何使用这里就不作介绍了。
六、添加SVN服务
前面我们是用命令行窗口启动svn服务的,窗口不能关闭,这样非常不方便。下面就来讲一下如何将服务放到windows服务中,这样开机后就自动启动。这里采用命令行的方式:
用后台服务的方式可以设置开机自动执行。
F:\Program Files\Subversion\bin>sc create svnservice binpath= "F:\Program Files\Subversion\bin\svnserve.exe --service -r F:\svnroot"
就可以用net svnservice stop 或者start来启动服务了 也可以在Sevices.msc来启动了。[注:=号后,一定要有一个空格]
然后我们就可以在Windows Service中看到该服务了,将其改成自动启动,这样每次开机就会自动启动svn service了。
补充:删除windows后台服务的方式:
方法一: 用sc.exe这个Windows命令
开始——运行——cmd.exe,然后输入sc就可以看到了。使用办法很简单:
sc delete "服务名" (如果服务名中间有空格,就需要前后加引号)
如针对上面的: sc delete svnservice
方法二:直接进行注册表编辑
打开注册表编辑器,找到下面的键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 一般服务会以相同的名字在这里显示一个主健,直接删除相关的键值便可。七、对可能碰到的问题的解法
基于svnserve的服务器,权限文件authz配置的常见问题及解答
为什么我的客户端没有写权限?
为什么我的权限没有起作用?
总结配置,发现
都是用svnserve作为服务器,
都在svnserve.conf中使用了authz-db选项
原因可能如下:
1,配置authz时,没有注意svnserve启动参数-r所指定的目录。
这里有两种情况:
A:-r直接指定到版本库(称之为单库svnserve方式)
比如,有一个库project1,位于D:/svn/project1
使用以下命令启动svnserve
[Copy to clipboard] [ - ]CODE:
svnserve -d -r D:/svn/project1
在这种情况下,一个svnserve只能为一个版本库工作
authz文件如果配置成下面这样就是错的,
[Copy to clipboard] [ - ]CODE:
[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@doc=r
应该配置成
[Copy to clipboard] [ - ]CODE:
[groups]
admin=user1
dev=user2
[/]
@admin=rw
@doc=r
因为[project1:/]表示库project1的根目录,而按上面的启动参数,是没有库的概念的。
使用类似这样的URL:svn://192.168.0.1/ 即可访问project1
B:-r指定到版本库的上级目录(称之为多库svnserve方式)
同样,有一个库project1,位于D:/svn/project1
如果使用以下命令启动svnserve
[Copy to clipboard] [ - ]CODE:
svnserve -d -r D:/svn
这种情况,一个svnserve可以为多个版本库工作,
这时如果想限制指定库的指定目录,就应该指定具体的库,像这样
[Copy to clipboard] [ - ]CODE:
[groups]
admin=user1
dev=user2
[project1:/]
@admin=rw
@doc=r
如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录
使用类似这样的URL:svn://192.168.0.1/project1 即可访问project1
这样的URL:svn://192.168.0.1/project2 即可访问project2
2,对中文目录进行权限控制时,没有将权限文件authz改为utf-8格式。
svn对于非英文文件名和目录名使用utf-8格式编码处理,要对中文目录进行正确控制,
应该使用无BOM的utf-8格式,如何将默认的文件转为utf-8,
我使用的是UltraEdit的菜单"ASCII to UTF-8 (Unicode Editing)"。在UltraEdit的配置中,可以设置有无BOM