Subversion运行方式1.一种是基于ApacheHttpServer,2.另外一种是SubversionStandaloneServer。两种运行方式的比较:Svnserve做服务器有几个不足之处:1.权限管理太简单,只能为整个仓库设置访问权限,不能为目录设置访问权限;2.访问用户的密码以明文形式保存在文本文件里面;3.只能提供一个仓库,如果要提供多个仓库,就必须启动多个Svnserve实例;4.Svnserve.exe必须借助第三方工具软件(例如FireDaemon)才能安装为Windows系统服务;5.必须在防火墙上打开单独的端口,而不能直接通过HTTP协议访问。用Apache2作为Subversion的服务平台,具有下列好处:1.可以为每个仓库、目录设置访问权限;2.密码采用MD5或者Crypt加密存储,并可以利用其他验证方式;3.可以同时服务多个Subversion仓库;4.通过HTTP协议即可访问仓库,几乎不会受到防火墙影响;5.可以通过浏览器直接浏览、下载文件;6.任何支持WebDAV的软件都可以操作Subversion仓库。Subversion四种访问协议:1.file://ReposPath/RepoPath以文件的形式直接访问,最简单的连接方法,不需要服务器,权限由操作系统控制,如果后台仓库你采用了FSFS(文本)格式的话那么还可以在局域网共享中使用。2.如果采用Apache作为服务器的话那么就可以采用这种形试访问,权限由Apache设置。3.同上,采用了HTTPS加密通道4.SVN://host/Repos/Repo,如果采用svnserve作为服务器的话那么就可以采用这种形试访问,它是一种基于TCP/IP的访问技术。权限由仓库的配置文件设置配置Subversion准备工作:由于配置Subversion的过程中会经常在命令行下执行命令,每次打开一个新的命令行窗口默认的当前目录都是C:\DocumentsandSettings\$UserName,这样在执行命令之前都要切换目录,很麻烦,所以我们先来解决这个问题。在“开始”-“运行”中输入“regedit”,打开注册表。找到\HKEY_CLASSES_ROOT\Folder\shell,如果没有shell,可以在Folder下新建一个名为shell的键,在shell下新建一个名为“命令行(CommandWindows)”的键,在这个键之下再建一个新的名为“Command”的键,设置默认值为“cmd/Kcd/d%L”。完成后的效果如下:这样当我们选中一个目录,在右键上下文菜单里面就多了一个“命令行(CommandWindows)”的选项,单击这个选项就可以打开一个命令行窗口并且快速切换到当前选中的目录。注意:如果你使用WinXP作为Subversion服务器,请打上SP1补丁,否则会导致错误的网络数据传输使Subversion的数据库不能正常使用。(我自己的Notebook是WinXPSP2,工作良好,至于Win2K没有测试,我想应该不会有什么问题吧?)安装Subversion:1.到,注意要下载2.0.X以上的版,否则不能和当前最新的Subversion工作。2.到=91上下载Subversion当前1.1.3版本的二进制安装文件。3.安装apachehttpserver4.安装Subversion5.检查$\apachegroup\apache2\modules下是不是已经有了mod_dav_svn.so和mod_authz_svn.so6.检查$\apachegroup\apache2\modules下是不是已经有了libdb42.dll,如图:7.搜索$\apachegroup\apache2\conf\httpd.conf配置文件中的#LoadModuledav_fs_modulemodules/mod_dav_fs.so,把前面的注释#去掉;并检查LoadModule配置节的末尾是不是有了LoadModuledav_svn_modulemodules/mod_dav_svn.so和LoadModuleauthz_svn_modulemodules/mod_authz_svn.so,如图:注意,请先安装Apache,然后再安装Subversion,这样上述5,6,7步骤都可以免了,在安装Subversion过程中它会自动拷贝相应文件到相应目录中,并且修改http.conf文件,然后重新启动apache服务使修改生效。但是我发现现在这个版本的Subversion安装文件可能有个bug,apache的http.conf的配置文件中#LoadModuledav_fs_modulemodules/mod_dav_fs.so注释没有去掉,所以大家还是小心检查一下。如果你是先安装的Subversion,然后再安装的Apache的,那么上述的步骤一个也不能漏,都需要自己手动完成。配置Subversion:1.在硬盘上建立源码库的根目录,例如E:\SVN2.在E:\SVN之下建立一个新的目录,例如TestRepository作为我们的测试源码库3.建立Subversion数据库,当前版本Subversion支持两种格式数据库,一种是FSFS,另外一种是BDB(BerkeleyDatabase)。在命令行下输入svnadmincreate--fs-typebdbTestRepository建立BDB格式的数据库(确保当前目录已经切换到E:\SVN\),在命令行下输入svnadmincreate--fs-typefsfsTestRepository建立FSFS格式的数据库(确保当前目录已经切换到E:\SVN\)。建好数据库以后,到E:\SVN\TestRepository下看看是不是多了很多目录和文件,可以研究一下这些文件,对理解Subversion有帮助,但是不要试图直接修改这些文件!如图:如果大家经常关注开源技术,就知道BDB是一个轻量级的关系数据库,可以作为一个轻巧的内置数据库,在很多开源项目下有很多应用,比如CVSTrac。FSFS格式主要的特点是可以支持Subversion的数据库和Subversion服务器可以在不同的物理机器上,可以通过网络共享(不知道是否支持NFS?),能很好的工作在MSWin98上,并且速度更快,但是由于FSFS是一种新的格式,稳定性可能没有BDB好。推荐大家使用BDB,毕竟BDB有很多年开发历史,比较稳定,而且我觉得把Subversion的DB和服务器分开放置好像没有什么必要吧?(谁能告诉我这样做的好处?),大家也不会拿一台Win98作server吧?^……^。不要试图在BDB的格式的数据库上使用网络共享,也不要使用网络磁盘映射,否则会导致无法预料的错误。4.打开$\apachegroup\apache2\conf\httpd.conf配置文件,在文件的末尾加入以下语句,Location/svnDAVsvnSVNParentPathe:\SVNAuthTypeBasicAuthNameSubversionrepositoriesAuthUserFilepasswd#AuthzSVNAccessFilesvnaccessfileRequirevalid-user/Location这里建立了一个虚拟目录,所有的Subversion源码仓库都在这个虚拟目录中,并且使用“passwd”文件中username/password(用户名/密码)列表访问。关于Subversion的安全配置是一个比较重要的部分,我会留到下次配置SSL加密连接再讲。5.在命令行下切换到$\apachegroup\apache2,执行bin\htpasswd-cpasswdusername,这里username是你想要加入的用户名,比如doudou。执行这个命令成功以后就会在bin目录下建立一个passwd文件,之后如果再加入新的用户和更改已有用户的密码,执行bin\htpasswdpasswdusername即可。如图:注意一定要在$\apachegroup\apache2下执行,这样生成的passwd文件$\apachegroup\apache2根目录下,而不是在bin目录下,apache默认是在$\apachegroup\apache2根目录下寻找passwd文件,如果你在bin目录下执行了这个命令请把生成的passwd文件剪切到$\apachegroup\apache2根目录下。这一点也可以从Apache的log日志中看得出来,如图:6.重启Apache服务7.在浏览器地址栏中输入,输入用户名密码,ok。Subversion现在已经可以正常工作了。如图:在写作本文的时候参考了TortoiseSVN的帮助文档,在此感谢TortoiseSVN团队杰出的工作!Subversion配置安装教程(二)今天接着昨天的内容讲Subversion的安全配置。在上一讲中我们在Apache的httpd.conf文件里加入了这样一节:Location/svnDAVsvnSVNParentPathe:\SVNAuthTypeBasicAuthNameSubversionrepositoriesAuthUserFilepasswd#AuthzSVNAccessFilesvnaccessfileRequirevalid-user/Location下面我来解释一下这些配置信息用途:Location/svn说明我们所有的代码仓库在/svn这个虚拟目录下DAVsvn说明Apache会使用svn这个module来解析这个虚拟目录SVNParentPathe:\SVN说明所有的代码仓库都在本地硬盘的e:\SVN下AuthTypeBasic使用最基本的认证校验,用户名/密码AuthNameSubversionrepositories说明在认证对话框弹出的时候,对话框的标题显示,你可以把它修改成你想要的任何提示信息,比如:AuthNameWarning等等AuthUserFilepasswd说明我们使用的accesslist文件的名字,在上一讲中我们建立的文件名字是passwd,所以这里是passwd。如果你建立的文件名字是其他的,这里要作相应的改动AuthzSVNAccessFile说明svn自己控制的accesslist文件,这个文件很重要,可以丰富svn的安全配置,在下面会讲到Requirevalid-user说明只有输入正确的用户名/密码才能访问上述的配置只能是最简单的安全配置,如果你想拥有更强大的安全配置,就需要加入一些东西了。比如:1.如果你想让所有的匿名用户能访问代码仓库,对某些特定用户才开放可写的权限,则需要把Requirevalid-user改成LimitExceptGETPROPFINDOPTIONSREPORTRequirevalid-user/LimitExcept2.如果你对于代码仓库里面某些目录还有更细致的访问控制,只用passwd就没办法啦,这个时候我们就需要AuthzSVNAccessFile文件了,去掉#AuthzSVNAccessFilesvnaccessfile这一行前面的注释。Apache首先会使用passwd校验用户名和密码,然后会认证信息传给Subversion的AuthzSVNAccessFile模块,由这个模块作更进一步的权限控制。首先我们来新建一个文