源代码管理, 做为程序员来讲应该是经常使用的.在源代码管理中, 以Apache + Subversion的方式最为方便好用了. 对于这个安装配置, 其实很简单, 但如果是第一次搞, 可能还是会很郁闷的, 有些小细节需要掌握. 下面就以Windows2003上配置Apache + Subversion + TortoiseSVN来讲下如何配置.
一. 安装Apache
1. 在 http://httpd.apache.org/download.cgi 下载2.0以上版本(推荐使用2.0以上的)
2. 下载Windows版本就可以了, 直接安装, 这个一般人都会, 没有什么交待的.
二. 安装Subversion
1. 在 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100.下载Subversion版本, 下载完后是一个压缩文件, 如是Exe则直接安装就可以了.如果是压缩文件, 则直接解压到某个目录, 然后把环境变量的Path中加上这个目录中Bin目录所在路径就可以了. 安装Subversion成功的标识就是在命令行中敲入svn 回车会得到"使用svn help 得到用法" 的提示即Ok了.
2. 在安装Subversion时(如果是Exe程序的), 会弹出Apache服务器, 根据你前面选择的Apaceh版本选择对应的, 如果是最新的Apache的话, 应该是2.2.X版本的.
3. 双击Apache右下角的Apache Server Monitor 如下图所示, 同为安装成功.
图1
4. 如果没有, 则需要下面的手功操作:
1). 到Subversion的安装目录(通常是c:\program files\Subversion
),找到文件/httpd/mod_dav_svn.so
和mod_authz_svn.so
,复制这些文件到Apache的模块目录(通常是c:\program files\apache group\apache2\modules
2). 使用记事本之类的文本编辑器修改Apache的配置文件(通常是 C:\Program Files\Apache Group\Apache2\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
3). 从 Subversion 安装目录bin下的:intl3_svn.dll, libapr-1.dll, libapriconv-1.dll, libaprutil-1.dll, libeay32.dll, ssleay32.dll
复制到 Apache 的 bin 目录(如果不行, 就把所有的DLL到复制过去)
4).重新启动Apache, 应该就可以看到图1所示的内容了.
三. 安装TortoiseSVN:
TortoiseSVN 是一个开源项目,那意味着你可以访问程序所有的源代码,你可以在http://tortoisesvn.tigris.org/svn/tortoisesvn/ 浏览代码(用户名: guest,密码为空)。
四. 下面进行SVN的配置了.
1. 假设我想把SVN的版本库放在E:\svn目录下, 则新建一个目录: E:\svn, 在这个目录里新建一个用于测试的版本库test, 这样, 就有了一个目录E:\svn\test\, 保证此目录里是空的, 没有任何内容. 然后在目录E:\svn\test目录中,右键菜单中点击TortoiseSVN -> 在此创建版本库. 这样就会生成一堆文件. 或者用命令行方式创建版本库也可以.
2. 编辑 Apache 的配置文件(通常在 c:\program files\apache group\apache2\conf\httpd.conf
), 在最后面加上如下内容:
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath "E:\svn"
AuthType Basic
AuthName "Subversion repositories"
#AuthUserFile "E:\svn\passwd"
#AuthzSVNAccessFile "E:\svn\Access.conf"
Require valid-user
</Location>
重新启动Apache, 在浏览器中直接输入: http://127.0.0.1/svn/test/ 你就可以看到版本库中的文件了, 用TortoiseSVN直接访问版本库, 不用输入任何用户名和密码, 一路确定过去, 也可以看到版本库内容了.
图2
3. 下面进行添加用户.
为了创建 passwd
文件,再次打开命令行提示符(DOS 窗口),进入 apache2
目录(通常是 C:\Program Files\Apache Software Foundation\Apache2.2\bin
),通过输入下面的命令创建文件:
htpasswd -c passwd <username>
在这里以用户名为tianjp为例, 则输入htpasswd -c passwd tianjp 回车
这时, 在C:\Program Files\Apache Software Foundation\Apache2.2\bin\目录下会多出一个文件passwd, 把此文件复制到E:\svn\ 目录下, 用UE打开看看, 发现是这样的:
tianjp:$apr1$4gDi43NL$yTTrdUFmDUST44DuBRbSj0
很明显, 是用户名: 后面是经过加密后的密码了.
好了, 现在有了用户名了, 我们可以把上面的配置改成如下了:
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath "E:\svn"
#SVNIndexXSLT "/svnindex.xsl"
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile "E:\svn\passwd"
#AuthzSVNAccessFile "E:\svn\Access.conf"
Require valid-user
</Location>
再次用户TortoiseSVN浏览时, 就要输入用户名和密码了.
图3
图4
图5
4. 管理版本库;
自然有了用户后, 就要进行一些限制, 比如谁可以访问, 谁可以提交代码等权限管理.
这时我们又要做一件事情. 用记事本编辑如下内容:
[groups]
AdminGroup = tianjp, test
CodeGroup = qicf,zhoub,wusy,mitj,xiezj,wanggc,yangming,linxx,yangc,gaozw,luochl,tansd,qicf,zhuhl,gbq
GuestGroup = guest
[/]
* = r
@AdminGroup = rw
@GuestGroup = r
[test:/]
* = r
@AdminGroup = rw
@CodeGroup = rw
另存为到E:\svn\Access.conf 文件上(文件名随便取, 不一定非要叫access.conf的).这样tianjp所在的AdminGroup组在test版本库下是具有rw权限的了. 相信上面的配置很简单, 大家一看就明白.
别忘了, 把配置文件里的这一行: #AuthzSVNAccessFile "E:\svn\Access.conf" 注释去掉
这样, 最后就变成了:
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath "E:\svn"
#SVNIndexXSLT "/svnindex.xsl"
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile "E:\svn\passwd"
AuthzSVNAccessFile "E:\svn\Access.conf"
Require valid-user
</Location>
到此, 完成了SVN服务器的搭建工作.
下面介绍下关于域控制下的SVN权限设置. 很多公司现在是基于域来管理用户的. 用上面的方式来管理版本库有个问题, 就是用户的密码要想改的话, 自己没办法修改, 必须要到管理员那去, 很不方便. 这样用域来管理用户密码不矢为良策.
使用 Windows 域认证
在这里, 我们需要一个模块: mod_auth_sspi
到这里下载 http://sourceforge.net/projects/mod-auth-sspi/ 下载此匹配你的 Apache 版本的模块,将文件mod_auth_sspi.so
复制到 Apache 的 modules 目录, 编辑 Apache 的配置文件: 增加一行
LoadModule sspi_auth_module modules/mod_auth_sspi.so
到 LoadModule 节。确认你在下行之前插入此行
LoadModule auth_module modules/mod_auth.so
为了让 Subversion 领域使用此认证类型,你需要将
AuthType Basic
修改为
AuthType SSPI
修改后的配置如下:
<location />
# how to authenticate a user
AuthType SSPI
AuthName "Grandsoft SVN repository"
SSPIAuth On
SSPIAuthoritative On
#SSPIDomain <你的域名称> 在这里是GRANDSOFT
#如果你没有域控制器,可以将域控制器的名称置为 <domaincontroller>
SSPIDomain GRANDSOFT
SSPIOmitDomain on
SSPIUsernameCase lower
SSPIPerRequestAuth on
SSPIOfferBasic On
require valid-user
</location>
<location /svn>
DAV svn
SVNParentPath "E:\svn"
SVNListParentPath on
# our access control policy
AuthzSVNAccessFile "E:\svn\Access.conf"
</location>
OK, 到此你可以使用域账号登陆了.
其它疑难杂症:
1. 我在经过上面的配置后, 发现在用浏览器访问版本库时没有问题, 但在用TortoiseSVN访问时, 老是报405的一个错误:
服务器发送了意外的返回值(405 Method not Allowed), 在响应"PROPFIND"的请求 "/svn/test" 中
, 郁闷了很久, 最后终于有牛人告诉我, 把Apache配置里的
LoadModule dir_module modules/mod_dir.so 这名给注释掉就OK了. 结果果然是这样, 为什么? 不知道.
2. 多重认证源问题: 有兴趣的可以自己再学习下了.
3. 还是那名话, 知之为知之, 不知为不知, 是知也. 很简单的问题, 会者不难, 难者不会.真是有道理啊.