架设SVN服务器

服务器端:windows 2003 + subversion
安装按照提示一直点下一步!
安装完subversion之后,使用\Subversion\bin\svnadmin.exe工具创建一个版本库,客户端的文档和代码都可以放在这个版本库中
创建方法:命令行定位到svnadmin.exe所在的目录,输入下面的命令行,此处我创建了一个文件夹:c:\project_repository作为版本库
执行完上面的命令后,这个目录里面的内容如下:
 
下面要配置用户和密码以及相关的目录权限
打开C:\project_repository\conf\svnserve.conf 将下面这几项修改一下
 
修改前
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
 
修改后
anon-access = none            # 表示不允许匿名访问
auth-access = write           # 表示授权用户有读写的权限
password-db = passwd      # 表示使用 当前目录 下的passwd文件作为用户名和密码 参数文件
authz-db = authz                # 表示使用 当前目录 下的authz文件作为目录权限验证文件
 
注意一点,将#后面的一个空格也要去掉,即,像anon-access这些配置要顶格写
 
打开passwd文件,添加用户名和密码
 
[users]
boss = boss_password
proj_manager = proj_manager_password
chenyong = chenyong_password
user1 = user1_password
user2 = user2_password
 
此处的user_name1和user_name2就是远程客户端连接SVN要使用的用户名和密码
 
打开authz文件进行目录权限的配置,关于这个文件,要使用UTF-8 without BOM方式的编码来存放,以防止中文乱码的现象,可以使用notepad++将这个文件转存为UTF-8 without BOM的编码方式
 
在配置authz这个文件之前,先看一下版本库的目录结构,比如此处我的SVN服务器目录结构如下
根目录就是svn://127.0.0.1,即,版本库的根目录,公司的老板对整个库有完整的操作权限(建议给它只读的权限),下面有一个jiutian的子目录,项目经理对其有完整的操作权限,再下面有chenyong和webproject两个子目录,chenyong这个人对chenyong这个目录有完整的操作权限;web开发小组的人对webproject这个子目录有完整的操作权限,不可互操作,下级目录继承了上级目录的可操作权限;基于这样的分派来创建用户,authz文件配置如下
 
[groups]
web_common = user1, user2;
 
[/]
boss = r
 
[/jiutian]
proj_manager = rw
 
 
[/jiutian/chenyong]
chenyong = rw
 
[/jiutian/webproject]
@web_common = rw
 
[groups]是将相同权限的用户分一下组,不分也行;此处我将web组的成员分在了一个组里面;
下面是分派权限
[/]
boss = r
表示对于根目录,boss这个用户有只读的权限,下面的目录它也都具有读的权限;
[/jiutian]  [/jiutian/chenyong] 这些都是一样的分派方式,都是按用户的权限来分派的
而[/jiutian/webproject] 分派权限的时候是按组分派的,组的前面要加一个@符号,而用户不需要加
 
 
还有一个点要说明的是,关于根目录,使用的是[/],而不是[project_repository:/]这种方式,关于这两种不同的用法,是取决于启动SVN服务的时候是否直接指向版本库,还是指向版本库的上一级目录;这个后面马上就会说到,在此MARK一下!
 
下面要说的就是启动SVN服务了,写一个批处理文件,内容如下:svnserve -d -r c:\project_repository,有一个不好的地方就是,执行了这个命令之后,CMD窗口就一直停在那个地方了,不能关了,也不能隐藏,看着很不爽;可以将这个批处理文件做成一个服务;
 
方式如下:
首先要两个小工具:instsrv.exe & srvany.exe这两个工具,自行到网上下载
下载下来之后在命令行运行如下命令:instsrv svnservice C:\Windows\System32\srvany.exe,其中svnservice是服务名;
然后打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\svnservice
如果该服务名下没有Parameters项目,则对服务名称项目右击新建项,名称为Parameters,然后定位到Parameters项,新建以下几个字符串值。
名称 Application 值为你要作为服务运行的程序地址。
名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径。
名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数
 
运行services.msc 打开服务列表,可以看到svnservice这个服务,自行修改成自动运行,这样开机后SVN服务就会自动运行了
 
至此,SVN服务器就部署好了;
 
不过此处只设置一个版本库,当然也可以设置多个版本库,这就是上面MARK处留下的问题;
比如我创建了一个目录C:\SVN,然后在下面创建了两个版本库的目录project_repository1 & project_repository2,目录结构如下
C:\SVN
C:\SVN\project_repository1
C:\SVN\project_repository2
而创建SVN服务的批处理文件写成下面命令:svnserve -d -r C:\SVN,那就表示有两个版本库了,上面所说的authz文件的配置就要修改一下了,不能直接使用[/]作为根目录,要指定具体要使用哪个版本库,比如[project_repository1:/]  这是一个版本库的根目录,[project_repository2:/]这是另一个版本库的根目录;上面说的那种方式是在创建SVN服务的时候就指定到版本库,所以在配置authz文件的时候就只要写[/]就行了,因为只启动了一个版本库的服务;比如这里两个版本库的目录,可以在创建SVN服务的时候指定到某一个具体工作的版本库svnserve -d -r C:\SVN\project_repository1,这样的话,配置authz就还是使用[/],而不是使用[project_repository1:/] (我觉得我有点唐僧了);
 
 
客户端:tortoiseSVN
 
在客户端安装tortoiseSVN,下载地址:
后面是语言包,下载相同版本的语言包!
 
我使用的windows2008,在安装这个客户端的时候出现了下面的问题,“无法通过windows installer服务安装此服务包。您必须安装带有更新版本的window installer服务的windows”。出现这个问题,可以到微软网站更新一下windows installer
将更新包下载下来后,可是安装更新包的时候又出现了问题:安装遇到错误:0x80070422,解决办法:创建一个批处理文件,将下面的脚本复制到里面,运行一下
sc config wuauserv start= auto
sc config bits start= auto
sc config DcomLaunch start= auto
net stop wuauserv
net start wuauserv
net stop bits
net start bits
net start DcomLaunch 
 
然后再安装tortoiseSVN,客户端终于安装好了!为了使用tortoiseSVN这个客户端工具,在服务器端也装一下这个;重启一下电脑;创建工作目录;
创建方式:鼠标右击(随便在哪里,在哪个文件夹,或者就在桌面上)->tortoiseSVN->Import
 
 
这就是在当前版本库中创建一个目录jiutian;
然后在远程客户端新建立一个空的目录,在目录空白处右击->SVNcheckout
红字处是服务器作为远程的IP地址
然后输入管理给你的用户名和密码就可以将这个服务checkout出来了,在这个目录里面放东西,并上传! OK了!
 
关于网上说,如果在内网下使用的话,用用svnserve来架SVN服务就可以了,但是它是明文;如果在外网下架SVN服务的话,就要使用APACH服务器了,我上面说的方式是基于svnserve 方式了,我使用抓包工具抓了一下外网下的SVN通信,发现使用的密码用的MD5值,并是明文,此处只是个人架了一个代码管理的服务器,用于自己的日常的代码管理维护,明文就当是开源吧,如果是公司要求的话,我就要再研究一下到底能否将上传的数据给搞到,或者就使用apach服务器吧!
 
今天一天就干了这些事情!
posted @ 2013-08-21 00:24  莫压枯枯地  阅读(2113)  评论(0编辑  收藏  举报