WINDOWS下搭建SVN服务器端的步骤分享
(Subversion)
1、获取svn程序
2、安装 Subversion(以下简称SVN)的服务器端和客户端。下载下来的服务器端是个 zip压缩包,直接解压缩即可,⽐如我解压到 E:\subversion 。客户端安装⽂件是个 exe 可执⾏⽂件,直接运⾏按提⽰安装即可,客户端安装完成后提⽰重启。
3、先建⽴空⽬录 E:\svn\repos1 ,注意⼀定是要空的。然后在 repos1 ⽂件夹上“右键->TortoiSVN->Create ”,然后可以选择版本库模式,这⾥使⽤默认的FSFS即可,然后就创建了⼀系列⽂件夹和⽂件,同命令⾏建⽴的⼀样。(这⼀步注意svn服务端要和库⽬录在同⼀个盘符下⾯,否则提⽰找不到⽬录)
4、进⼊命令⾏并切换到subversion的bin⽬录。输⼊如下命令:
< --daemon
svnrve 将会在端⼝ 3690 等待请求,--daemon(两个短横线)选项告诉 svnrve 以守护进程⽅式运⾏,这样在⼿动终⽌之前不会退出。注意不要关闭命令⾏窗⼝,关闭窗⼝会把 svnrve 停⽌
5、配置⽤户和权限
⽤⽂本编辑器打开E:\svn\repos1\conf⽬录,修改f:
将:
# password-db = passwd
改为:
password-db = passwd
即去掉前⾯的 # 注释符,注意前⾯不能有空格。
然后修改同⽬录的passwd⽂件,增加⼀个帐号:
将:
[urs]
# harry = harryscret
# sally = sallyscret
增加帐号:
[urs]
#harry = harryscret
#sally = sallyscret
test = test
6、初始化导⼊
(在做这⼀步之前⼀定要执⾏第5步)
下⾯就是将我们的数据(项⽬)导⼊到这个版本库,以后就由版本库管理我们的数据。我们的任何改动都回被版本库记录下来,甚⾄我们⾃⼰丢失、改错数据时版本库也能帮我们找回数据。
⽐如,我在 d:\wwwroot 下有个 guestbook ⽂件夹,⾥⾯存放的是我编写的留⾔簿程序。在此⽂件夹上“右键 -> TortoiSVN -> ” ,在弹出对话框的“URL of repository”输⼊“svn://localhost/repos1/
guestbook”。在“Import message”输⼊“导⼊整个留⾔簿”作为注释。
点 OK 后要求输⼊帐号。我们在⽤户名和密码处都输⼊ test 。完成后 guestbook 中的内容全部导⼊到了
svn://localhost/svn/repo1/guestbook 。
我们看到在 e:\svn\repo1 没有任何变化,连个 guestbook ⽂件夹都没有建⽴,唯⼀的变化就是e:\svn\repo1容量变⼤了。实际上我们源guestbook中的内容已经导⼊ repo1 版本库了,源 guestbook ⽂件夹可以删除了。
7、svn配置结束,这是最简单的步骤,已经可以⽤了,然后把svn整合到系统服务,以后就不⽤⼀直开着命令窗⼝了。把以下内容粘贴到⽂本⽂件,然后重命名⽂件为:*.bat执⾏就好了,
sc create svnrver binpath= "C:\Program Files\Subversion\ --rvice --root F:\svn" displayname= "svnrver" depend= tcpip start= auto obj= "NT AUTHORITY\NetworkService"
其中C:\Program Files\Subversion\ 为svn的路径
F:\svn 为版本库的⽬录
displayname= "svnrver" 为设置服务的名字
推广普通话作文--root 是设置根⽬录⽐如:原来你访问为:svn://localhost/svn
设置--root F:\svn之后缩写为svn://localhost 这个⼀定要注意,否则Error: URL 'svn://localhost/svn'doesn't exist
8、svn能⽤了,下⾯是原始资料,稍微整理了⼀下,如果以上内容不能满⾜,参考以下内容,希望没有浪费宝贵时间。如果希望⽹站同步更新,使⽤了钩⼦程序,也在下⾯内容。
⼀、准备⼯作
1、获取 Subversion 服务器程序
到官⽅⽹站(/)下载最新的服务器安装程序。⽬前最新的是1.4.6版本,具体下载地址在:
/r ... 100&folderID=91 ,注意找for apache 2.2.x 版本的。
2、获取 TortoiSVN 客户端程序
从官⽅⽹站 /downloads 获取最新的TortoiSVN 。TortoiSVN 是⼀个客户端程序,⽤来与 subversion 服务器端通讯。Subversion ⾃带⼀个客户端程序 ,但 TortoiSVN 更好操作,提⾼效率。
⼆、安装服务器端和客户端
⾸先安装 Apache 2.2.6 ,具体安装⽅法⼤家参考相关资料,或者参看我写的《Windows下安装Apache 2.2.x》。
其次安装 Subversion(以下简称SVN)的服务器端和客户端。下载下来的服务器端是个 zip压缩包,直接解压缩即可,⽐如我解压到 E:\subversion 。客户端安装⽂件是个 exe 可执⾏⽂件,直接运⾏按提⽰安装即可,客户端安装完成后提⽰重启。
三、建⽴版本库(Repository)
运⾏Subversion服务器需要⾸先要建⽴⼀个版本库(Repository)。版本库可以看作是服务器上集中存放和管理数据的地⽅。开始建⽴版本库。⾸先建⽴ e:\svn 空⽂件夹作为所有版本库的根⽬录。然后,进⼊命令⾏并切换到subversion的bin⽬录。输⼊如下命令:
svnadmin create E:\svn\repos1
此命令在 E:\svn 下建⽴⼀个版本库 repos1 。repos1 下⾯会⾃动⽣成⼀些⽂件夹和⽂件。
我们也可以使⽤ TortoiSVN 图形化的完成这⼀步:
先建⽴空⽬录 E:\svn\repos1 ,注意⼀定是要空的。然后在 repos1 ⽂件夹上“右键->TortoiSVN->Create ”,然后可以选择版本库模式,这⾥使⽤默认的FSFS即可,然后就创建了⼀系列⽂件夹和⽂件,同命令⾏建⽴的⼀样。此时 subversion 服务还没有开始,只是通过它的命令建⽴了版本库。继续在刚才的命令窗⼝输⼊:
< –daemon希腊简介
svnrve 将会在端⼝ 3690 等待请求,--daemon(两个短横线)选项告诉 svnrve 以守护进程⽅式运⾏,这样在⼿动终⽌之前不会退出。注意不要关闭命令⾏窗⼝,关闭窗⼝会把 svnrve 停⽌。
为了验证svnrve正常⼯作,使⽤TortoiSVN -> Repo-browr 来查看版本库。在弹出的 URL 对话框中输⼊:
svn://localhost/svn/repo1
点 OK 按钮后就可以看见 repo1 版本库的⽬录树结构了,只不过这时 repo1 是个空库。
你也可以使⽤--root选项设置根位置来限制服务器的访问⽬录,从⽽增加安全性和节约输⼊svnrve URL的时间:
< --daemon --root drive:\path\to\repository
以前⾯的测试作为例,svnrve将会运⾏为:
< --daemon --root e:\svn
然后TortoiSVN中的版本库浏览器URL缩减为:
svn://localhost/repo1
工作证明怎么开⽤⽂本编辑器打开E:\svn\repos1\conf⽬录,修改f:
将:
# password-db = passwd
改为:
password-db = passwd
即去掉前⾯的 # 注释符,注意前⾯不能有空格。
然后修改同⽬录的passwd⽂件,增加⼀个帐号:
将:
[urs]
# harry = harryscret
新安江# sally = sallyscret
增加帐号:
[urs]
#harry = harryscret
#sally = sallyscret
test = test
下⾯就是将我们的数据(项⽬)导⼊到这个版本库,以后就由版本库管理我们的数据。我们的任何改动都回被版本库记录下来,甚⾄我们⾃⼰丢失、改错数据时版本库也能帮我们找回数据。
⽐如,我在 d:\wwwroot 下有个 guestbook ⽂件夹,⾥⾯存放的是我编写的留⾔簿程序。在此⽂件夹上“右键 -> TortoiSVN -> ” ,在弹出对话框的“URL of repository”输⼊“svn://localhost/repos1/guestbook”。在“Import message”输⼊“导⼊整个留⾔簿”作为注释。
点 OK 后要求输⼊帐号。我们在⽤户名和密码处都输⼊ test 。完成后 guestbook 中的内容全部导⼊到了
svn://localhost/svn/repo1/guestbook 。
我们看到在 e:\svn\repo1 没有任何变化,连个 guestbook ⽂件夹都没有建⽴,唯⼀的变化就是e:\svn\repo1容量变⼤了。实际上我们源guestbook中的内容已经导⼊ repo1 版本库了,源 guestbook ⽂件夹可以删除了。
需要注意的是,这⼀步操作可以完全在另⼀台安装了 TortoiSVN 的客户机上进⾏。例如运⾏svnrve的主机的IP是
扫兴者133.96.121.22,则URL部分输⼊的内容就是“svn://133.96.121.22” 。
1、取出(check out)
取出版本库到⼀个⼯作拷贝:
来到任意空⽬录下,⽐如在f分区建⽴⼀个空⽂件夹 f:\work 。“右键 -> SVN Checkout”。在“URL of repository”中输藏红花泡水喝有什么功效
⼊“svn://localhost/svn/repo1/guestbook”,这样我们就得到了⼀份 guestbook 中内容的⼯作拷贝。
2、存⼊(check in)/提交(commit)
在⼯作拷贝中作出修改并提交:
在 guestbook ⼯作拷贝中随便打开⼀个⽂件,作出修改,然后“右键 -> ”。这样我们就把修改提交到了版本库,版本库根据情况存储我们提交的数据。
在修改过的⽂件上“右键 -> TortoiSVN -> Show Log” ,可以看到对这个⽂件所有的提交。在不同的 revision 条⽬上“右键 -> Compare with working copy”,我们可以⽐较⼯作拷贝的⽂件和所选 revision 版本的区别。
Subversion的设计包括⼀个抽象的⽹络层,这意味着版本库可以通过各种服务器进程访问。理论上讲,Subversion可以使⽤⽆限数量的⽹络协议实现,⽬前实践中存在着两种服务器。
SVNServer:svnrve是⼀个⼩的(也叫轻型的)、独⽴服务器,使⽤⾃⼰定义的协议和客户端。(作者注:以下称这种服务器为“svnrver服务器”,上⾯的安装配置就是安装svnrver服务器。)
ApacheSVN:Apache是最流⾏的web服务器,通过使⽤mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使⽤HTTP的扩展协议WebDAV/DeltaV进⾏访问。(作者注:以下称这种服务器为“ApacheSVN服务器”)
通过 Http 协议访问版本库是 Subversion 的亮点之⼀。ApacheSVN服务器具备了许多svnrve服务器没有的特性,使⽤上更加灵活,但是有⼀点难于配置,灵活通常会带来复杂性。
由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满⾜需求。要让 Apache 与 Subversion 协同⼯作,需要使⽤WebDAV(Web-bad Distributed Authoring and Versioning:)Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的
扩展,关于 WebDAV 的规范和⼯作原理,可以参考 IETF RFC 2518 (/)。
⼀、必备条件
为了让你的版本库使⽤HTTP⽹络,你必需具备以下⼏个条件:
1、配置好httpd 2.2.x,并且使⽤mod_dav启动。
2、为mod_dav安装mod_dav_svn插件。
3、配置你的f,使http协议能访问版本库。
下⾯以我的配置过程详细讲解。
环境:
OS:Windows XP SP2
Web:Apache 2.2.6
SVN:svn-win32-1.4.6
⼆、安装
1、安装Apache
具体安装⽅法见:《Windows下安装Apache 2.2.x》
2、安装 Subversion
将下载下来的 svn-win32-1.4.6.zip 直接解压即可,⽐如我解压到 e:\subversion 。
从Subversion安装⽬录的 bin ⼦⽬录将 intl3_svn.dll、libdb44.dll、mod_authz_svn.so、mod_dav_svn.so 拷贝到Apache的模块⽬录(Apache 安装⽬录的 modules ⽂件夹)。
三、基本的Apache配置
修改Apache的配置⽂件 f ,使⽤LoadModule来加载mod_dav_svn模块。
将
#LoadModule dav_module modules/mod_dav.so
改成:
LoadModule dav_module modules/mod_dav.so
即去掉前⾯的“#”号。
添加:
LoadModule dav_svn_module modules/mod_dav_svn.so
⼀定确定它在 mod_dav 之后。
现在你已经设置了Apache和Subversion,但是Apache不知道如何处理Subversion客户端,例如TortoiSVN。为了让Apache知道哪个⽬录是⽤来作为Subversion版本库,你需要使⽤编辑器(例如记事本)编辑Apache的配置⽂件。
在配置⽂件最后添加如下⼏⾏:
<Location / repository>
DAV svn<
br /> SVNPath e:/svn/repos1
</Location>
这个配置告诉Apache⾸先需要启⽤ dav_module,然后加载 dav_svn_module 。版本库对外的URL是:服务器
IP/repository ,所有的Subversion版本库在物理上位于e:/svn/repos1 。
配置完毕后重新启动 Apache,打开浏览器,输⼊ 服务器IP/ repository 将会看到如下画⾯:
这表⽰ Apache 的 dav_svn 模块已经可以正常⼯作了。⽤户可以使⽤任何⼀种 Subversion 的客户端通过 Http 协议访问你的版本库。
如果想要指定多个版本库,可以⽤多个 Location 标签,也可以使⽤ SVNParentPath 代替 SVNPath,例如在 e:\svn 下有多个
版本库 repos1,repos2 等等,⽤如下⽅式指定:
<Location /repository>
DAV svn
SVNParentPath e:/svn
</Location>
脸上长
“SVNParentPath e:/svn ” 表⽰ e:\svn 下的每个⼦⽬录都是⼀个版本库。可以通过 服务器IP/repository/repos1,服务器IP/repository/repos2 来访问。
现在你的版本库任何⼈都可以访问,并且有完全的写操作权限。也就是说任何⼈都可以匿名读取,修改,提交,以及删除版本库中的内容(注:这时不需要配置E:\svn\repos\f ⽂件,并且也不需要启动E:\subversion\。因为提交是通过Apache的dav模块处理的,⽽不是由svnrvice处理。)。我们⽤ TortoiSVN 客户端验证即知。
显然⼤部分场合这是不符合需求的。那么如何进⾏权限设置呢,Apache 提供了基本的权限设置:
四、认证选项
1、基本 HTTP 认证
最简单的客户端认证⽅式是通过 HTTP 基本认证机制,简单的使⽤⽤户名和密码来验证⼀个⽤户的⾝份。Apache提供了⼀个htpasswd ⼯具来管理⼀个⽤户⽂件,这个⽂件包含⽤户名和加密后的密码,这些就是你希望赋予 Subversion 特别权限的⽤户。htpasswd 可以在 Apache 的 bin 安装⽬录下找到。具体使⽤⽅法如下:
创建⽤户⽂件:
htpasswd -c /etc/svn/passwordfile urname
添加新⽤户(-m 表⽰以MD5加密密码):
关于孕妇htpasswd [-m] /etc/svn/passwordfile Newurname
更改⽤户密码:
htpasswd [-m] /etc/svn/passwordfile urname
删除⽤户(要⽤⼤写的 D ):
htpasswd –D /etc/svn/passwordfile urname
接下来修改 f,在 Location 标签中加⼊如下内容:
AuthType Basic
AuthName "svn repos"
AuthUrFile E:/usr/Apache2.2/bin/passwd
Require valid-ur
说明:
AuthType Basic:启⽤基本的验证,⽐如⽤户名/密码对。
AuthName "svn repos":当⼀个认证对话框弹出时,出现在认证对话框中的信息。(最好⽤英⽂,TortoiSVN 不⽀持中⽂,安装语⾔包除外。)
AuthUrFile E:/usr/Apache2.2/bin/passwd:指定E:\usr\Apache2.2\bin\passwd为⽤户⽂件,⽤来验证⽤户的⽤户名及密码。Require valid-ur:限定⽤户只有输⼊正确的⽤户名及密码后才能访问这个路径
重新启动 Apache ,打开浏览器访问版本库。Apache 会提⽰你输⼊⽤户名和密码来认证登陆了,现在只有 passwd ⽂件中设定的⽤户才可以访问版本库。也可以配置只有特定⽤户可以访问,替换上述 "Require valid-ur" 为 "Require ur tony robert" 将只有⽤户⽂件中的 tony 和 robert 可以访问该版本库。
有的时候也许不需要这样严格的访问控制,例如⼤多数开源项⽬允许匿名的读取操作,⽽只有认证⽤户才允许写操作。为了实现更为细致的权限认证,可以使⽤ Limit 和 LimitExcept 标签。例如:
<LimitExcept GET PROPFIND OPTIONS REPORT>
require valid-ur
</LimitExcept>
以上配置将使匿名⽤户有读取权限,⽽限制只有 passwd 中配置的⽤户可以使⽤写操作。
如果这还不能满⾜你的要求,你希望精确的控制版本库⽬录访问,可以使⽤ Apache 的 mod_authz_svn 模块对每个⽬录进⾏认证操作。