这里我也不再阐述subversion的作用了,大家也可以百度一下,我这里只讲他们的基本配置与使用,在配置这个环境之前,我翻阅了大量的资料,感觉没有一篇真正可以让读出从心里明白的文档,要不就是版本兼容,要么就是讲得糊里糊涂,反正让读者一看就是没有头绪,我这篇文档就是因为这个原因而编写的,我会以自己的配置经历过程为主再以自己的一些感受把这篇文档写好,尽量让和我一样刚接触这个的兄弟姐妹们少走弯路,好了,废话少说,我们开始吧
其实subversion可以用两种服务模式,一种是自定义协议的subserve服务,另一个是作为apache的模块,这里我想大家注意一下,我在配置的时候,由于就是不清楚他们两种的区别,所以有很多时候,我把第一种服务的配置与第二种方法的配置混为一潭了,结果是可想而知,所以请大家在配置之前一定要清楚,自己是基于哪一种服务方式的,我可以简略的说一下他们之间的区别,第一种可以利用svn://这样方式访问的,而第二种是可以利用http://这种方式访问的,另外还有两种方式访问,一种是https:// (这种还需要另外配置),还有一种方式是通过file://这种本地方式访问,这是以两种方式配置都能使用的,我们这里介绍是作为apache模块的方式。
Apache的配置
这里我最主要想阐述的就是subversion配置,所以对于apache的一些基本安装与配置,我们就不作为重点进行阐述了,我这里apache安装目录是在c:\program files\apache software foundation\apache2.2
Subversion的配置
Apache配置之后,我们就开始本篇文档最重要的配置——subversion的配置,我下载的subersion(以下我们简称svn)是svn 1.4.6版本的,免安装的,直接解压,我这里把它解压到的目录是d:\phptools\phpassemble\svn\svn,解压完后,我们开始讲解它怎么与apache结合的
下面就一步一步的按我的步骤来完成svn+apache的配置吧
第一步:打开httpd.conf(这个是包含在apache目录下的,这里的目录是C:\Program Files\Apache Software Foundation\Apache2.2\conf下的,大家根本自己的apache环境把这个文件打开)找到下面两行
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
把它们前面的#号去掉,可能大家会问它个加载这个模块是什么意思,这两个模块已经包含在C:\Program Files\Apache Software Foundation\Apache2.2\modules下面的,这两个模块最主要的作用就是能使我们从客户端使用http://这样的方式访问SVN(版本控制器),如果你没加载这个服务,就不能以这种网络方式访问SVN
第二步 :加载SO文件,将SVN的bin目录下的两个.so文件复制到apache安装目录的moduls下面去,顺便还需要把svn的bin目录下的intl3_svn.dll与libdb44.dll复制到apache安装目录的moduls 下面去,注意:我们这里的svn的bin目录是d:\phptools\phpassemble\svn\svn,而apache安装目录的moduls 则是C:\Program Files\Apache Software Foundation\Apache2.2\modules,大家可根据自己的环境的不同进行相应修改就行了,我们加入那个.so文件后,我们再在httpd.conf中的LoadModule最后加上这两句
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
这两个模块分别代表的意思是:我们在访问SVN时对我们的口令进行验证以及让我们可以对SVN版本库进行权限的控制
第三步:我们打开httpd.conf,在最后面加上以下几行
<Location /svn>
DAV svn
SVNParentPath "D:/svn"
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile "conf/passwd"
</Location>
其中/svn代表用http的访问路径, SVNParentPath
“D:/svn”,这条语句的意思是我所有的版本库是在d:\svn下面的,AuthType Basic代表采用Basic方式进行认证,认证的用户名密码文件是Apache安装目录下面的conf\passwd文件 ,其中只允许认证的用户才能访问,其它用户只能下载查看。
第四步:上一步骤我们已经把apache+svn的基本配置已经搞好了,这一步我们这里主要是创建一个登录用户,就是在我们使用http://**********/svn/***对某个版本库访问时,你必须去控制哪个用户登录,才能成功,而登录成功的用户就是由我们在服务器上进行创建的
在运行窗口中通过CMD命令打开DOS命令窗口,转到Apache安装路径的bin目录下,在其中键入htpasswd.exe -c passwd root,回车后,就会在bin目录下创建一个passwd的文件,其中新建一个用户,用户名是root,在后来的命令提示里面会让你输入密码的,等密码得到确认以后,一个passwd文件就完成了。再创建其它用户时“-c”参数就不需要了,直接键入htpasswd.exe passwd f2_quzhong,重复上述步骤就又创建了另一个用户,如此反复创建更多用户,如下图所示,用户全部创建好后,将bin目录下的passwd文件复制到AuthUserFile关键字指定的目录下(conf目录下)。
第五步:创建版本库,我们为什么要使用SVN ,其实我们就是因为它对版本的控制很出色,我们在项目中,一般都是以一个项目为一个版本库,我们这里所有的版本库都是放在了svn,记住, svn本身不是一个版本库,他就象我们新建的一个文件夹一样,只是用来存放版本库而已,还有我在此我遇到一个非常头疼的问题,足足折腾了我一天的时间,我才把它弄明白,就是我这个svn目录不能建在我们服务器的环境目录下,利用我PHP的环境目录为d:/usr/webroot,这个svn绝不能也建在d:/usr/webroot/ 下,当你把svn建在这下面时,你就无法使用http://这样的方式访问了,这里我就不讲为什么了,如果想问为什么的,我们私下里聊,因为说起来有点麻烦,大家记住就行了,那我怎么创建一个版本库呢,我们就可以这样,还是同样进入命令窗口,进行svn安装目录下的bin目录下,然后使用命令svnadmin create d:\svn\testobj,这样我就在svn下新建了一个testobj的版本库
至此你可以把apache重启一下了,如输入 http://localhost/svn/testobj,提示你输入密码后,显示这样的界面,说明你安装成功了,那么你可以小庆祝一下了
这里显示revision4,这是因为我本身已经对这个版本操作了,它会显示最新的版本出来,下面的文件就是我从客户端导入进去的,最下面的就是SVN的版本的,我们第一次访问时,这里显示的版本号应该是revision0,下面也没有文件。
第六步:目录权限控制,我们首先再创一个版本库testobj2,这样我们在SVN上就有两个版本库,对了,注意,我们在创了一个版本库后,会在相应的版本库生成一些文件,具体什么作用,我还没有去研究,现在我们这里假设已经有了两个版本库,可以看一下我的版本库.
这里我已经新建两个版本库了,那好,我们新建版本库了,我们也创建登录用户了,那我们怎么控制哪个用户是对testobj进行访问控制的呢,哪些又是对testobj2 进行访问控制的呢,又或者又是哪些用户是对所有版本库进行控制的呢,所以我们就必须要有一个能控制用户访问控制的文件,我们在apache安装目录下的conf 下新建一个svnauth这样的文件,不需要写扩展名,然后用文本编辑器打开,在里面输入以下内容
[groups]
admin=root
testobj2=f2_quzhong
[/]
@admin=rw
[testobj2:/]
@testobj2=rw
[testobj:/]
@testobj2=r
之前我们利用htpasswd这个命令创建了两个用户root和f2_quzhong,在这里我们就利用这两个用户进行权限的控制操作,上面是什么意思呢,[groups]代表的是权限组,有两个权限组是admin与testobj2,名字是随便起的,只要你和你的合作伙伴能清楚就行了,创建了两个权限组后,我们再对版本库进行权限控制操作,我们看[/]@admin=rw,这个代表的是admin这个权限组的用户可以对所有的版本库进行读与写,[testobj2:/]@testobj2=rw这个代表的是对testobj2版本库是由testobj2权限组所指定的用户进行管理的,当然也包括上面所说的admin权限组,最后一个就不用说了与testobj2的意思一样,只不过我们这里用了”r”,是代表testobj2这个权限组的成员只能对testobj 这个版本库进行读操作,不能进行写操作。
第七步:我们得再修改httpd.conf,在最后的[location /svn]……………..[/location]之间加上这么一句AuthzSVNAccessFile conf/svnauthz它代表意思是我们在访问版本库时,必须遵守conf目录下的svnauthz 这个权限文件下所定义的规则才能访问,修改后成这样的了
<Location /svn/>
DAV svn
SVNParentPath D:/svn
AuthType Basic
AuthName "Subversion Reporsitory"
AuthUserFile conf/passwd
AuthzSVNAccessFile conf/svnauthz
Require valid-user
</Location>
至此我们对svn+apache的结合配置可以告一个段落了,
最后我来说一下怎么在客户端对服务器上的那些版本库进行导入导出,说一些基本操作,要深入的话,大家可以下载相应的客户端软件的手册,我们使用的是客户端软件是TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.msi,这是英文版的,我们可以下载一个汉化包LanguagePack_1.5.5.14361-win32-zh_CN.msi这样对我们操作起来更方便,现在我开始讲一些基本的客户端软件的基本操作
导入版本库
在你需要导入版本库的目录下单击右键选择[TortoiseSVN]-> [导入...],在弹开的窗口的URL框中输入版本库的目录地址(如http://172.23.30.70/svn/yxv3)
选择确定,此时会弹出一个密码框,需要输入相应的口令才会让你导入(除非你设置了不需要密码访问)
输入正确的口令后,就会把客户端相应文件夹下的文件导入到你指令的版本库中去了。打开浏览器便会见到你上传的文件已经产生在相应的版本库中了
导出
新建一个空文件夹作为[本地工作区]的存放文件夹(建议与项目同名),在文件夹上(或者文件夹里)单击鼠标右键后在命令菜单中选择“检出Checkout…”,出现操作窗口。注意:只能检出Checkout到一个空文件夹。
把本地硬盘上的项目文件夹中的内容(不要复制项目的根文件夹)全部复制到[本地工作区]
文件夹中,并对文件夹中进行清理操作(同“导入Import”操作前的清理操作)。然后选择[本地工作区]
文件夹单击鼠标右键跳出菜单,选择命令“提交Commit…”
其实我们除了这几个操作之外,还可以进行很多操作,我这里就不再讲了,
哎呀,好困了,凌晨一点半了,明天还得上班,得睡觉了,关于svn的配置就写在这里吧,希望大家在看了这篇文档后,也能很快的配置自己理想中的SVN环境,当然上面并不一定正确,如果有哪不对的地方,希望我们能多多交流,互相提高
洗洗睡吧,哈哈。