Posted on 2007-07-02 10:18
chemz 阅读(4220)
评论(2) 编辑 收藏 引用 所属分类:
Other
subversion安装配置记录
由于前些年在版本的管理上采用的都是CVS系统,总体上而言还是很优秀的,经过了多年
的项目开发管理经历,在使用CVS系统在管理中大型的软件项目时还是遇到了很多不可克服的
缺陷和局限性,主要表现在如下的几个方向:
1. 无法进行文件名称的修改活动,这样一来就会导致必须先删除该文件再上传,丢失了
历史信息,要不就必须到服务上将xxx,v文件进行改名(我采用这种方法,不过总是
找管理员太不方便了);
2. 目录名称没有被管理,这样就不能进行改名等动作,其实项目的目录结构对于项目的
成功起了非常重要的作用,每次也只能到服务器上进行修改;
3. 项目的分支代价太高,需要对每一个文件都进行标记,对于大的项目耗时太长,并且
基本上不能删除废弃了的分支和标记,因为那样很容易导致项目仓库的损坏,我就遇
到了好多次这种让人发狂的情况;
4. 对于文件二进制和文本的处理经常会出现混乱,结果就使将二进制文件当作文本上传
后内容被扩展导致丢失,因为有些时候二进制文件的扩展名和某些文本文件的扩展名
相同了,所以导致CVS识别就会出错。
上面所列举的就是我这多年来管理软件项目开发时所遇到的几个最大的问题,其他我没
有遇到的问题不易再次评价。所以为了能够更好的解决版本管理中遇到的问题同时将版本的
管理工作进一步的作好,前一段时间尝试着安装并配置了subversion(简称svn)系统,试图
使用svn来替换CVS系统,以解决上述问题。通过近三个月的使用感觉上目前还没有遇到其他
的什么工具移植上的问题,因为svn和CVS系统在命令行接口上报此一致,同时所使用的
TorToiseSVN和TorToiseCVS基本上相同,所以适应性非常的好,同时也解决了上面的几个问
题,所以特将svn系统的安装和配置过程记录下来。
1. Linux和svn的安装
最好将svn系统安装在Linux操作系统环境下,这样一来系统比较的稳定可靠,同时
也可以减少很多的病毒和攻击的服务器日常维护工作量;我将svn安装在了RHEL5的
服务器版本下,其实该操作系统本身自带有一个1.4.2的svn的版本,所以基本上来
将只要你在安装操作系统时选择了svn就会安装该软件系统了,同时还需要注意由于
我选择了采用http协议作为svn的访问协议,所以还必须同时安装apache和对应与svn
的module,主要有如下的包需要安装上去:
apr-1.2.7-11.i386.rpm
apr-util-1.2.7-6.i386.rpm
mod_dav_svn-1.4.2-2.el5.i386.rpm
如果你没有安装此三个软件包,也可以在安装完成后手工进行安装就可以了,如果
要确认是否成功的安装了svn可以通过如下的命令进行验证:
svn --version
2. apache和svn的配置
在安装完成后就可以进行配置了,首先必须配置apache一使得apache能成功载入svn
的插件模块。
2.1. apache的配置
进入到/etc/httpd/conf目录下用vim打开httpd.conf配置文件进行选项的修改:
a. KeepAlive选项
该选项可以修改也可以不修改,主要是为了提高http协议访问的性能,可以
使得svn仓库的访问更快,KeepAlive表示可以保持http的永久性TCP连接,
省去了每次都需要进行重建TCP连接的巨大开销,找到如下几个选项并修改:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
b. ServerAdmin/ServerName选项
对于需要对系统进行管理的可以在ServerAdmin选项设置成为管理员的email
地址,这样在出现问题时apache会自动发送邮件到该地址中;而ServerName
必须设置为本服务器的域名,如xxx.xxx.cn:80。
2.2. svn的配置
进入到/etc/httpd/conf.d目录下用vim打开subversion.conf配置文件进行选项的
修改:
a. module的配置
一定要保证下面的两句话存在于配置文件中,否则无法在如svn的模块,就
无法访问svn的仓库了:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
b. 仓库目录配置
项目仓库就是用于存放项目目录结构的服务器目录,一般情况下Linux的规则
时间容易变化的内容存放在/var目录下,所以我们需要在/var目录下创建一个
svn目录,这样所有的项目的根目录都作为/var/svn/目录下的一级子目录了,
这样以来就可以在一个仓库目录下存放多个项目了;同时还必须在/var/svn/
目录下创建一个conf目录用于存放svn的配置文件,然后将下面的一段添加到
subversion.conf文件中:
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /var/svn/conf/passwd.conf
AuthzSVNAccessFile /var/svn/conf/authz.conf
Require valid-user
</Location>
上面的配置含义其实很好理解,就不一一解释了,而对于passwd.conf和
authz.conf这两个用户密码和权限的配置文件将会在下面的仓库配置中进行
描述。
配置完成了上述的工作后我们需要验证apache是否能够启动,一般情况下需要通过
如下的命令来设置apache自动在系统运行时启动:
chkconfig --level 345 httpd on
service httpd start
第一句话表示将httpd设置成为在模式345下自动运行。
3. 项目仓库配置
仓库的配置基本上来讲就比较的简单了通过如下的命令就可以创建一个项目的仓库了:
cd /var/svn
svnadmin create proj
有了项目仓库后还必须进行对应的访问用户和权限的配置,否则无法访问,具体如下:
cd /var/sv/conf
htpasswd -b -c passwd.conf user1 pass1
这样一来会自动地在/var/svn/conf目录下创建一个passwd.conf密码文件,同时里面
包含了user1用户和其密码pass1,要注意一旦运行了该命令后passwd.conf就会被创建
下次再添加用户名和密码时就不能够在使用-c参数了,-c表示重新创建密码文件,这
样会导致以前的信息丢失,紧紧使用-b选项就可以了。
此时还需要创建一个权限控制文件authz.conf,可以通过vim authz.conf来完成:
一般情况下内容像下面这个样子:
[groups]
g_leader = pm
g_dev = dev1,dev2,dev3
#=============================== proj Repository ==========================
[proj:/]
@g_leader = r
@g_dev = rw
user1 = r
* =
[proj:/xxx/tags]
@g_dev = r
dev1 = rw
* =
首先[groups]标记所定义的是分组信息(当然你可以不分组),一般会根据参与者的
性质对其进行分组,比如:团队的领导、开发人员、测试人员、发行人员等,因为他、
们具有相似的权限,这样也方便控制;定义的格式非常的简单,等号的左边表示组名,
右边是用逗号隔开的用户名。
下面就是具体的项目和目录权限的配置了(可以做的很细,到每一个项目的子目录),
[proj:/]标签表示的是某个项目(proj)的目录(/)的权限配置,其中proj表示项目
仓库名称,/表示项目的目录名(此处是根目录的意思);而下面就可以针对组或用户
进行配置了,注意组名称的前面必须要加一个@符号,权限只有三种:r、w、无;对于
不用允许访问的用户必须保证其等号的右边是空的;svn的默认情况下是所有的用户均
具有只读权限,如果需要关闭这个默认的配置必须将* =添加到对应的配置中。
4. 项目的导入
经过上面的配置后svn的系统就可以正常的运行了,此时还需要将项目的目录导入到
仓库中,一般情况下可以采用TorToiseSVN进行项目的import,其实很简单只要在本
地硬盘中创建好项目的目录,然后点击鼠标右键选择TortoiseSVN/Import菜单就可
以了。