svn集中式版本控制工具,虽然目前git等分布式管理工具有替代svn之势,但是作为老牌代码版本控制工具,这帮“老人”不放弃他们的工作习惯,咱们就得继续使用下去。今天总结一下我在CentOS上搭建svn服务器的过程,以备不时之需,如果能够帮助上你那就更好了。
一、工作原理
其实很简单,就是在咱们的服务器上建立一个仓库,然后我们可以用这个仓库来存取和控制咱们的代码。方便大家共享代码、控制版本,就是这个样子的。
二、搭建说明
搭建需要理解这么几点:
1、咱们需要安装svn服务器软件(subversion)
2、咱们需要建个仓库,然后给这个仓库配置一下权限
3、启动svn服务器
注意:这个可能和apache服务器等的设置有点不一样,它是需要先创建仓库,然后在仓库里边配置权限。
三、搭建过程
搭建的环境是CentOS,如果你是在其他操作系统,请出门右转。
1、安装subversion(svn服务器软件)
#yum install subversion
2、创建仓库
#mkdir /var/svn/repos
#svnadmin create /var/svn/repos
创建仓库实质就是使用第二条命令,创建svn运行需要的文件和文件夹。创建好仓库后,进入/var/svn/repos,你将得到如下目录结构:
repos/
conf/ #配置文件目录
db/ #控制版本等信息的库
format
hooks/ #hooks程序目录
locks/ #锁文件,有的时候提交不了了,提示被锁住了,就和这个有关
README.txt
3、配置仓库
配置仓库,我们只需要关注conf目录(/var/svn/repos/conf),这个目录里边有三个文件passwd(配置用户名密码)、authz(配置权限)、svnserve.conf(配置服务器)。
首先,添加用户。
打开passwd文件,然后再最后添加一行,等号前边是用户名,后边是密码,如下所示:
[users]<pre name="code" class="plain"># harry = harryssecret
# sally = sallyssecret
forevernull = password
然后,给用户分权限。
打开authz文件,然后再最后添加两行,如下所示:
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[/]
* = rw
注意,这个地方我们直接给所有用户对根目录具有读写权限,我们只是为了尽快能运行起来才这样分权限的,如果这个地方你理解了,这个先分组后分权利的功能可以自己做测试。
最后,配置服务器。
这个就很简单了,打开svnserve.conf文件,然后删除几个#号就OK了。把下边这几行前边的#去掉:
#anon-access = read #匿名用户可读
#auth-access = write #授权用户可写
#password-db = passwd #指定用户文件,上边已配置
#authz-db = authz #指定授权文件,上边已配置
4、启动和关闭服务器
启动svn服务
svnserve -d -r /var/svn/repos
已守护进程的方式启动svn服务,需要指定仓库的路径
关闭svn服务
pgreg -l svnserve #获取svnserve的pid
kill -9 pid(上边命令现实的数字) #发送kill命令
这样就关闭了svn服务
到此,大功告成, svn服务器已经搭建完成,照例咱们来测试一下。
四、svn服务器测试
按照上述步骤搭建完成,我们就可以使用如下路径来链接这台svn服务器了。
svn://localhost
或者
svn://ip地址
下边我将是用命令行方式来测试svn,如果你喜欢用TortoiseSVN也可以。
如果你搭建成功了,那么下边是一定会成功的:
svn co svn://localhost helloworld
上边这条命令是只,checkout出版本库里的代码到本地目录helloworld里,你将会看到如下输出,因为目前咱们的库里什么都没有。
version 0.
OK,到此证明你已经成功了,如果你没有看见这个东西,那就回去检查一下哪错了吧,如果你是按照本教程做的,有问题,也可以留言给我。剩下的工作就是你在本地开发代码,然后提交的问题了。