搭建可用http访问的svn(windows)

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,广泛应用于项目的团队开发之中,达到方便共用资源的目的。在个人开发之中,也可以使用SVN来管理自己的源码,或者通过SVN发布自己的项目工程代码,如BAE中应用的部署。本文主要介绍在windows环境下,搭建自己的svn服务端。环境及需要的软件,详细信息如下:
环境:windows7旗舰版service pack1
软件:Setup-Subversion-1.8.15.msi (下载网址 http://subversion.apache.org/packages.html
TortoiseSVN-1.9.3.27038-x64-svn-1.9.3.msi(下载网址https://tortoisesvn.net/downloads.html
httpd-2.2.31-x86-r3.zip(下载网址http://www.apachehaus.com/cgi-bin/download.plx
额外推荐使用的软件:如notepad++、ultraEdit等,此类软件更优于windows自带的记事本,可以进行字符串批量替换,还显示行号,在遇到错误需要排除时候,可以方便定位到错误所在行号,本人现在使用ultraEdit,其界面也是相当不错的。

svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
1、独立服务器运行,就配套使用svn客户端,使用svn协议进行项目的版本控制,如commit、checkout等所有操作,这时候就只能以svn协议开头,如图1
独立服务器模式:svn客户端import
图1
    假设这里写成http://192.168.0.5/webDemo,在独立服务器运行模式下,将会报错。
2、借助Apache运行。这里就可以实现http或者https协议来访问。例如,在svn客户端中使用http进行checkout操作,如图2;在浏览器中访问svn服务中的库文件,如图3
这里写图片描述
图2
这里写图片描述
图3

第一种方式,独立服务器运行,直接将svn服务端与svn客户端一步一步安装即可。

创建svn服务版本库: svnadmin create PATHNAME ,假设pathname中有空格,需要将pathname用英文双引号引起来。
在版本库的conf文件夹(即PATHNAME的conf文件夹)下,修改svnserve.conf文件,将

#anon-access = read
#auth-access = write
#password-db = passwd

前面的#都去掉,注意,保持每行语句的前面没有空格!
然后在版本库的conf文件夹下,修改passwd文件,如在最后一行添加admin=123456 ,表示用户名为admin,密码为123456,这里可以建立多个用户,在使用svn客户端进行操作时候,将会有验证操作,需要用户名及密码来验证身份权限。
启动svn服务: svnserve -d -r E:\Apache22\svnData ,当然也可以将svn服务注册到windows系统服务中,命令如下
sc create svn binpath= “C:\Subversion\bin\svnserve.exe –service -r G:\svnData” displayname= “Subversion服务” depend= Tcpip ,注意=后面都是由空格的。
删除系统服务中的服务:sc delete 服务名称

第二种方式 借助Apache,搭建可用http(或者https)访问的svn

详细步骤如下
1、解压httpd-2.2.31-x86-r3.zip,将Apache22文件夹放置到系统某盘的根目录下。笔者将其放在E盘根目录下。
2、找到E:\Apache22\conf\httpd.conf文件,修改“ServerRoot”节点处为 ServerRoot “E:/Apache22” 。
修改Apache端口号。假设你的电脑中没有程序会使用80端口、443端口,那么此步骤可以跳过。
    输入“netstat -ano”查看所有端口占用情况,如图4.假设如果觉得显示出来的太多不方便查找,就输入“netstat -ano | findstr “端口号””来进行筛选,如netstat -ano | findstr 80。笔者安装了VMware,VMware默认使用了443端口。而且笔者的80端口已经被占用了,故将Apache的端口80改为100,Apache里的ssl监听端口由443改为442。修改端口号这一步,将E:\Apache22\conf目录下的所有文件都进行查找一下,所有的80都改为100,所有的443都改为442,可以使用ultraEdit软件进行多文件批量查找,批量替换,这样速度较快,节省时间。为了避免端口号冲突,除了可以修改Apache端口号的办法,还可以修改VMware(或其他占用了80、443端口的软件)使用的端口号,具体方法不再重复,自行百度。查看占用了端口号的软件,打开任务管理器,并显示PID列,如果任务管理器已经有PID一列则可以跳过次步骤,“Ctrl+Shift+Esc”打开任务管理器,菜单选择“查看”→“选择列”,在弹出窗口中勾选“PID(进程标识符)”后确定。

图4
图4
在cmd窗口中运行 “E:\Apache22\bin\bin\httpd.exe” -k install -n apache22 切记,包含引号。该命令的意思是,安装apache服务,并将该服务名称命名为apache22(你也可以改成别的)。
回车,服务安装完毕,完毕后,会自动测试,若有问题,窗口会提示错误,此时,请根据错误自行排查。
正常安装完毕如下图5所示:
其中,Errors reported here must be corrected before the service can be started.意思是,若该句话后面有错误信息,则表示服务安装失败,需要先改正错误。若没有,则成功。可以使用net start apache22 启动Apache服务,或者在计算机管理——服务中启动Apache22服务,如图6所示,在浏览器中输入http://localhost:100,看到图7所示界面,则表示Apache正常。
这里写图片描述
图5
这里写图片描述
图6
这里写图片描述
图7
3、将Subversion\bin 目录下的mod_dav_svn.so、mod_authz_svn.so 文件拷贝到E:\Apache22\modules。将Subversion\bin 目录下动态库
libdb48.dll 、intl3_svn.dll 、ssleay32.dll 、libeay32.dll 拷贝出来放在 E:\Apache22\bin 目录下,特别注意:在E:\Apache22\bin文件夹下面可能有同名的文件,拷贝到文件夹下,一定不要替换原文件!
偷懒的办法:可以将Subversion\bin文件夹下面的所有dll文件拷贝到E:\Apache22\bin 目录下。
4、修改 E:\Apache22\conf\httpd.conf文件,去掉以下行的注释

#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so 
在LoadModule节的最后添加以下两行: 
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so 

重启apache,net start apache22,当apache无法启动,或者无法加载某个动态库的时候,一般先检查该动态库的关联情况,可以使用dependency worker软件检测某文件所依赖的其他dll文件。假设将Subversion\bin文件夹下面的所有dll文件拷贝到E:\Apache22\bin 目录下,一般不会报错。
5、创建passwd文件
在命令行下面将当前目录切换到apache22\bin目录, 输入命令:
htpasswd.exe -c passwd username
New password: ** (输入密码)
Re-type new password: **
然后将会看到,新产生一个passwd文件,使用ultraedit打开之后,可以看到明文展示的用户名,密码则是加密之后的。注意这里的用户名及密码,是用于apache验证的。拷贝此文件到F:\svnData\conf文件夹目录下
6、修改E:\Apache22\conf\httpd.conf文件,在此文件的最后添加以下代码

<Location /svnData>
DAV svn
SVNListParentPath on
SVNPath E:\Apache22\svnData\webDemo
AuthType Basic
#SSLRequireSSL
AuthName "the admin full name, the same with password"
AuthUserFile "F:/svnData/conf/passwd"
AuthzSVNAccessFile "F:/svnData/conf/authz"
Require valid-user
#Satisfy Any
 </Location>

含义解释
首行加#表示注释
SVNPath版本库所在目录;SSLRequireSSL 用SSL提高版本库安全,禁用无SSL的http访问方式;SVNPath版本库所在目录;
AuthType Basic 启用基本的验证,比如用户名/密码;AuthName “my Subversion Server” #验证时代提示;AuthUserFile “F:/svnData/conf/passwd” 用户文件所在目录;AuthzSVNAccessFile “F:/svnData/conf/authz” 权限配置所在目录;Require valid-user 限定用户只有输入正确的用户名及密码后才能访问这个路径
7、创建认证文件authz

[groups]
group1 = yang
[/] 
@group1 = rw

groups表示分组,下面可以有多个组,每个组里面可以有多个用户,如group1=yang,hbtcm,informationEngineering
[/],表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录,使用[project1:/]类似这样的URL:svn://192.168.0.2/project1 即可访问project1
@ 表示接下来的是一个组名,不是用户名,当然也可以将@group1=yang改为yang=rw ,表达的意义完全一样。
用户的权限就分只读(‘r’)、读写(’rw’)和禁止访问(”);还可以在最后加上* = r ,*表示“除了上面提到的那些人之外的其余所有人”,也就是“除了group1组外的其他所有人”
* = r 则表示“那些人只能读,不能写”
对中文目录进行权限控制时,应该将权限文件authz改为utf-8格式

8、新建svnData文件夹,笔者建立在E:\Apache22目录下。
svnadmin create –compatible-version 1.6 E:\Apache22\svnData\webDemo
注意:这里需要使用svnadmin create –compatible-version 1.6 PATHNAME 的格式,否则会报错“(20014)Internal error (specific information not available): Expected FS format between ‘1’ and ‘6’; found format ‘7’”。此错误提示可以在E:\Apache22\logs\error.log文件里面看到。
9、按照服务器独立运行模式,修改E:\Apache22\svnData\webDemo\conf文件夹下面的svnserve.conf文件与passwd文件。
开启svnserver服务 svnserve -d -r E:\Apache22\svnData
10、更深部分,Apache上使用自己认证的SSL证书进行认证,采用https服务来配置svn
进入到E:\Apache22\conf文件夹

set OPENSSL_CONF=openssl.cnf
创建公钥文件 every.key
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr -config .\openssl.cnf
对认证签署请求进行认证并获取认证证书,最终得到了最后一个文件,经认证的证书 severy.crt 
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

配置期间遇到的问题及解决办法
报错:Expected FS format between ‘1’ and ‘6’; found format ‘7’
版本冲突,使用svnadmin create –compatible-version 1.6 PATHNAME创建svn版本库,可以解决此问题

svn –version 命令与 svnserve –version 命令,可以查看svn客户端与服务端的版本

其他备注:
如果是先安装好了Subversion,那么就需要特备注意当时安装的Subversion是32位的版本还是64位的版本,假设习惯性地将所有的软件都安装在Program Files文件目录里面,而不区分32位与64位,那么可能会习惯性地认为:电脑的操作系统是64位的,所以我的软件也是64位的。
下载与Subversion对应版本的Apache,要么都是32位,要么都是64位。而且Apache还区分2.2._ 与2.4_ 的版本。然后将Subversion安装目录bin下的dll文件复制到Apache文件目录bin时候,假设有一样的dll文件,注意不要替换原文件!!!

大致参考一下文档
文档1
http://wenku.baidu.com/link?url=OEOCl07KrHrL-vXDMPRwRtomFrhyx5S3mmUrFVQnTQ12b538V7nXqRr81zHnK36I1iNiWUILRiaYG2SzEwMCEXGfFYyVv5l0HkHSx7MO-xW
文档2
http://wenku.baidu.com/view/96b017c708a1284ac850436d.html?re=view
文档3
http://wenku.baidu.com/link?url=OEOCl07KrHrL-vXDMPRwRtomFrhyx5S3mmUrFVQnTQ12b538V7nXqRr81zHnK36I1iNiWUILRiaYG2SzEwMCEXGfFYyVv5l0HkHSx7MO-xW
文档4
http://blog.csdn.net/zalion/article/details/9114901
文档5
http://blog.sina.com.cn/s/blog_48258fbe0100c0ve.html
文档6
http://blog.csdn.net/litaoshoujiao/article/details/8552110

报错 Cannot load modules/mod_ssl.so ,仔细检查自己的步骤,经过上述步骤多半可以解决。

备注:可以使用Dependency Walker工具来分析某文件所依赖的其他dll文件、文件中的函数有哪些。

Subversion(SVN)作为一个单独的版本管理软件是不具备网页浏览功能的。就是说,你可以用版本管理的客户端比如:TotoriseSVN来和SVN服务器进行连接。这样如果你的电脑没有安装SVN客户端就不能使用SVN服务器提供的服务了。为了实现请求客户端的目标,就想通过网页来进行访问浏览。所以就将网页浏览的功能通过Apache服务器来实现。而通过Apache的插件来和SVN进行连接后,用户可以通过浏览器:IE,Firefox,NetScape等,访问SVN服务器。这样很方便了。现在有不少的SVN服务器软件直接提供网页功能,而且支持图形界面,如VisualSVN。NetBeans,Eclipse等开发IDE都可以配置SVN插件,很容易用的。[摘自百度知道]

vmware虚拟机vmware-hostd.exe占用了端口号443
方法一:修改apache的端口号,由443改为442(可以是任意其他未被占用的端口号)
针对httpd-2.4.18-x64-vc11-r3版本的Apache24
Apache安装目录\conf\extra 文件夹目录下httpd-ahssl.conf 与 httpd-ssl.conf
Apache安装目录\conf\original\extra 目录下的 httpd-ssl.conf 文件
针对httpd-2.2.31-x86-r3,可以使用ultraedit软件,打开config文件夹下的所有子文件夹及其文件,修改所有的443端口号为其他端口号。
方法二:修改vmware的端口号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值