本节接着上节和大家一起来学习一下SVN服务的问题,经过一段时间对SVN的学习有了一些心得,于是和大家分享一下,看完本文SVN服务问题的介绍你肯定有不少收获,希望本文能教会你更多东西。
用SVNServe搭建SVN服务器
我们要把svnserve运行起来,我将在例子中介绍具体的使用方法。
下面假设我在本机上运行svnserve,IP为192.168.0.1,这个svn服务器为局域网内的电脑提供svn服务。我打算把svn服务器的访问地址设为http://192.168.0.1/svnprojects/projectX,其中X为不同的多个项目。整个过程如下(以windows下为例):
首先确定repo在本机上的储存的位置,比如我准备把repo放在D:svnprojetcs下,那么在命令行运行svnserve-d-rd:svnprojects就可以了。其中-d参数让svnserve运行在后台,-r参数限定了repo在网络上可以访问的地址。这样如果网络上其它的计算机要checkout这个服务器,只需要输入svncheckoutsvn://192.168.0.1/project1而repo在本机上实际的位置是d:svnprojectsproject1。同理,如果想checkoutproject2,则把上面的project1改成project2就可以了。到此,一个简单的svn服务器就算是基本架设好了。但如果要正常使用,我们还需要设定用户的验证和相应的权限。
现在我们先建立一个叫project1的repo,然后转到project1中:
svnadmincreated:svnprojectsproject1
cdd:svnprojectsproject1
project1目录下有一堆目录,进入conf并打开svnserve.conf这个文件,找到以下几行,并把前面的注解符号‘#’去掉,注意千万在每行的前面别留任何空格。
anon-access=read
auth-access=write
password-db=passwd
其中anon-access和auth-access分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,这很好,我们不需要改它们。但如果想拒绝匿名用户的访问,只需把read改成none就能达到目的。password-db后的passwd则为定义用户名及密码的文件路径。这个文件默认跟snvserve.conf在同一个目录,下面看看怎么配置passwd中的内容。
[user]
#harry=harryssecret
#sally=sallyssecret
harry和sally这两行分别定义了可以对repo进行写入的用户的用户名和密码。我们可以在下面加上自己的用户名和密码,比如testsvn=tester
这样就给了用户testsvn往repo中写的权限。存盘退出后,svn服务器就算正式可以运行了!把所有需要管理的项目都放在d:svnprojects这个目录下,像正常那样用svnadmincreate命令建立repo,如果要checkoutrepo,则在命令行中输入:svncheckoutsvn://192.168.0.1/project1如果要commit刚需要输入刚才设置好的用户名和密码:svncommit-m"wearecommitingchanges!"--usernametestsvn--passwordtester
给Windows用户的建议
如果你打算在Windows系统上运行svnserve,只是简单的在命令行输入svnserve-d-rd:svnprojects不是个好方法,一是每次都这么干太麻烦,二是服务器启动后为了保持它的运行,你必须让命令提示符窗口一直悬在桌面上,影响美观。最好是把svnserve作为系统的一个进程每次启动自动运行:
D:>sccreatesvn
binpath="D:svnbinsvnserve.exe--service-rD:svnprojects"
displayname="SubversionServer"
depend=Tcpip
start=auto把当中的路径换成你的svn安装目录就可以了。
在Apache下建立SVN服务器
在Apache中部署Subversion实际上并不比用svnserve难多少,它的难点在于一般人没有修改Apache配置的权限,如果你有相应的修改权限,那么搭建一个svn服务器不是一件难事,我们来看看应该怎么配置。
准备工作
首先确定Apache正确安装,mod_dav和mov_dav_svn这两个模块也被启用,在Debian系的Linux上可以这么安装:
sudoapt-getinstallapache2subversionlibapache2-svn
在Windows平台上,可以下载一个XAMPP,ApacheMySQLPHP什么的就都有了。
确定mod_dav和mod_dav_svn被打开:a2enmoddavdav_svn
基本设置
SVN服务介绍时以上的准备工作做完后,就正式开始了,还是拿part2的机器网络环境,同样的例子。
我准备让repo的网络访问地址成为http://192.168.0.1/svnprojects/projectX,
修改/etc/apache2/conf下的httpd.conf,加入如下代码:
<Location/svnprojects>
DAVsvn
SVNParentPath/path/to/svnprojects
</Location>
更多详细的<Location>命令用法请参见Apache手册,下同。SVNParentPath命令用来把网络访问地址和repo的实际地址对应起来。
这样就设置完了,如果你把repo建立好了,现在就已经可以checkout了,输入:svncheckouthttp://192.168.0.1/svnprojects/project1设定用户的权限和验证
但这样肯定是不够的,因为还没有设定相应的用户权限,现在不管谁都可以往repo里塞东西,为了更好的控制,我们还需要设定访问权限,比如让指定的用户可以commit,其他的只能checkout。因为我们在Apache上,所以访问权限的控制就可以直接借用Apache的,首先为你的用户设定用户名和密码:
htpasswd-cmb/path/to/passwdfile/passwordsuser1test1这样就把用户名和密码储存在passwords中了,加密方式为MD5。如果需要添加新的用户,htpasswd-mb/path/to/passwdfile/passwordsuser2test2以此类推。
然后回到我们在httpd.conf中添加的代码,修改一下:
- <Location>
- DAVsvn
- SVNParentPath/path/to/svnprojects
- AuthTypeBasic
- AuthName"TestRepository"
- AuthUserFile/path/to/passwdfile/passwords
- <LimitExceptGETPROPFINDOPTIONREPORT>
- Requirevalid-user
- </LimitExcept>
- </Location>
在这段代码的控制下,任何人都可以对repo进行checkout,但只有user1和user2才可以commit,<LimitExcept>的作用是控制HTTP请求,如果HTTP请求是GETPROPFINDOPTIONREPORT中的一种,则不需要去验证用户。
最后,你需要把repo所在的目录和文件的所有权都改成系统中操作Apache的用户,这样在commit的时候才会被Apache认可。在Ubuntu中,这个用户叫www-data:
sudochown-Rwww-data/path/to/repo如果你用其它系统或是用Windows,可以在Apache的配置文件中找到User这个命令来知道应该把目录的所有权交给谁。
以上就是一个初步的Subversion服务器的搭建,这一篇考虑到实际上用的人可能不多,要用的人估计肯定会自己配置,因此我写的不够细致,比如说没有说到基于SSL的设置步骤。本节关于SVN服务问题讲解完毕,请关注本节其他相关报道。
【编辑推荐】