基于CentOS Linux搭建svn服务器在研发产品时的应用

时间:2022-08-21 06:20:24

基于CentOS Linux搭建svn服务器在研发产品时的应用

【摘要】subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人。目前绝大多数开源软件都使用svn作为代码版本管理软件,它可以有效的解决代码管理混乱、代码冲突、代码整合期间引发的bug和代码拥有者的权限控制。

【关键词】centos;Linux;svn;搭建服务器

1.引言

在高速发展的信息时代,人们对于高效率的开发越来越关注。当企业需要研发新产品时,市场部往往要求研发的周期越短越好,因为产品越早,在市场中的优势就越明显,因此研发周期就会尽量的缩短。但在短时间内要开发出新产品,就需要研发人员的协同工作。而在开发的周期中,研发人员增多,研发人员交付的文件就非常容易产生问题:(1)研发团队中的几个人同时对一个文件进行修改,最终发现修改的冲突而不得不放弃其他人的修改成果,造成了时间的浪费。(2)修改好的文件保存之后,又想把文件恢复到修改前的状态。(3)在自己的项目中发现了问题,想要分析问题是哪个文件版本产生的。(4)想比较一个文件不同版本时的区别。要解决这些问题,就需要一个比较好的版本控制工具,因此我们推荐svn。

2.svn的简介和工作原理

svn的工作方式是C/S模式,其中C为客户端,S为服务器端。svn服务器有两种运行方式:独立服务器和借助于apache,svn://或http://,svn客户端tortoisesvn。

svn的基本工作原理:在一台服务器上建立一个源代码库,库里可存放许多不同项目的源程序。由有源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里项目文件下载到本地,然后用户可以在本地修改,修改完成后用svn命令进行提交,源代码库统一管理修改。svn版本控制解决了:(1)代码管理混乱;(2)解决代码冲突困难;(3)在代码整合期间引发bug;(4)无法对代码的拥有者进行权限控制;(5)项目不同版本的困难。

svn工作原理示意图如图1所示:

图1 svn工作原理图

subversion目录说明:

*dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据

*db目录:就是所有版本控制的数据存放文件

*hooks目录:放置hook脚本文件的目录

*locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端

*format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号

*conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)

3.svn服务器搭建

系统环境CentOS 6.0最小化安装(关闭iptables和selinux)+ssh+yum

(1)安装必须的软件包:yum install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl* ntsysv vim-enhanced

说明:

subversion(svn服务器)

httpd mod_dav_svn mod_perl(用于支持WEB方式管理SVN服务器)

sendmail(用于配置用户提交代码后发邮件提醒)

wget gcc-c++ make unzip perl*(必备软件包)

(2)基本的svn服务器配置

①新建一个目录用于存储SVN所有文件

# mkdir/home/svn

②新建一个版本仓库

# svnadmin create/home/svn/svntest

③初始化版本仓库中的目录

# mkdir temp temp/server temp/client temp/test(建立临时目录)

# svn import temp/file:///home/svn/svntest-m“初始化SVN目录”

# rm-rf temp(删除临时建立的目录)

④添加用户

要添加SVN用户非常简单,只需在/home/svn/svntest/conf/passwd文件添加一个形如“username=password”的条目就可以了。为了测试,我添加了如下内容:

[users]

pm=pm_pw

server_group=server_pw

client_group=client_pw

test_group=test_pw

⑤修改用户访问策略

/home/svn/svntest/conf/authz记录用户的访问策略,以下是参考:

[groups]

svntest_p=pm

svntest_s=server_group

svntest_c=client_group

svntest_t=test_group

[svntest:/]

@svntest_p=rw

* =

[svntest:/server]

@ svntest _p=rw

@ svntest_s=rw

* =

[svntest:/client]

@ svntest_p=rw

@ svntest_c=rw

* =

[svntest:/doc]

@ svntest_p=rw

@ svntest_s=r

@ svntest_c=r

@ svntest_t=r

* =

说明:以上信息表示,只有svntest_p用户组有根目录的读写权。r表示对该目录有读权限,w表示对该目录有写权限,rw表示对该目录有读写权限。最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录。

⑥修改svnserve.conf文件,让用户和策略配置升效。

svnserve.conf内容如下:

[general]

anon-access=none

auth-access=write

password-db=/home/svn/svntest/conf/passwd

authz-db=/home/svn/svntest/conf/authz

⑦启动服务器

#svnserve-d-r/home/svn

注意:如果修改了svn配置,需要重启svn服务,步骤如下:

# ps-aux|grep svnserve

# kill-9 ID号

# svnserve-d-r/home/svn

4.配置SVN服务器的HTTP支持

(1)转换SVN服务器的密码

由于svn服务器的密码是明文的,HTTP服务器不与支持,所以需要转换成HTTP支持的格式。笔者写了一个Perl脚本完成这个工作.

脚本内容如下:

# cd/home/svn/svntest/conf/

# vim PtoWP.pl

#!/usr/bin/perl

# write by huabo,2009-11-20

use warnings;

use strict;

#open the svn passwd file

open(FILE,"passwd")or die("Cannot open the passwd file!!!n");

#clear the apache passwd file

open(OUT_FILE,">webpasswd")or die("Cannot open the webpasswd file!!!n");

close(OUT_FILE);

#begin

foreach(){

if($_=~m/^[^#].*=/){

$_=~s/=//;

`htpasswd-b webpasswd $_`;

}

}

# chmod +x PtoWP.pl

# ./PtoWP.pl

Adding password for user pm

Adding password for user server_group

Adding password for user client_group

Adding password for user test_group

现在目录下会多一个webpasswd文件。

(2)修改httpd.conf,添加关于SVN服务器的内容

编辑/etc/httpd/conf/httpd.conf,在最后添加如下信息:

DAV svn

SVNPath/home/svn/svntest/

AuthType Basic

AuthName"svn for svntest"

AuthUserFile/home/svn/svntest/conf/webpasswd

AuthzSVNAccessFile/home/svn/svntest/conf/authz

Satisfy all

Require valid-user

(3)修改svn目录的属主为apache帐号:chown-R apache.apache/home/svn/svntest/

注意:原文少了这一步,会出权限问题。

图2 svn登陆页面

(4)重启Web服务器:

# /etc/init.d/httpd restart

Stopping httpd:[FAILED]

Starting httpd:[OK]

(5)用浏览器访问http://10.12.72.70/svntest测试

测试结果如图2所示。

特别说明:如果输入正确的用户名和密码,不能够正确登陆,建议关闭关闭iptables和selinux。

5.结束语

目前svn服务器已经在我公司投入使用,它的使用有效解决了多人研发产品时对项目文件修改与保存时存在的:代码管理混乱、解决代码冲突困难、在代码整合期间引发bug、无法对代码的拥有者进行权限控制、项目不同版本的困难等问题,有效提升了工作效率,缩短了产品的开发周期。

上一篇:大学生日常情感生活问题探讨 下一篇:基于工学结合的UI设计与实操课程实践模式探究