Subversion介绍
 

2009-08-21 来源:网络

 

Subversion是一个自由、开放源码的版本控制系统。它是一个通用系统,可用来管理任何类型的文件, 其中包括程序源码。Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行(单线进行也就是必须一个一个进行),开发进度会进展迅速。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件质量—如果出现不正确的更改,只要撤销那一次更改操作即可。

Subversion实现了绝大部分CVS的已有功能;充分考虑现有的CVS用户,在使用方式上模仿CVS,同时开发了一系列工具,使得基于CVS的项目能够顺利迁移到Subversion上。和CVS相比,它有很多优点,例如目录版本控制、不可分割的提交、一致的数据处理方式和更有效率的分支与标记等。

Subversion安装

本文需要安装两个文件,httpd和subversion。

httpd是web服务器,用来通过web访问subversion,Turbolinux GTES10.5默认已经安装了httpd服务。 Subversion从网站subversion.tigris.org下载最新版本subversion-1.4.4.tar.gz

新建一个用户:svnroot

最好不要让root用户参与到svn的权限管理和日常的运行和维护工作中来,但是下面的一些安装和配置操作还是 需要root用户来完成的,因为有些操作只有root才能做。

安装httpd

用下面命令察看系统是否已经安装
# rpm –qa | grep httpd

若没有安装,从Turbolinux GTES10.5安装光盘中找到安装包:httpd-2.0.52-9.7.i386.rpm

# rpm –ivh httpd-2.0.52-9.7.i386.rpm

启动apache服务

# service httpd start

打开浏览器http://webserver ip address/如果有测试页” GreatTurbo Enterprise Server Test Page “出现则证明已经安装成功。

安装辅助软件包

从Turbolinux GTES10.5安装盘第2和第3张安装光盘中找到下面软件包并安装:
# rpm –ivh apr-devel-0.9.4-24.1.3.i386.rpm
# rpm –ivh apr-util-devel-0.9.4-17.2.i386.rpm
# rpm –ivh pcre-devel-4.5-3.2.i386.rpm
# rpm –ivh httpd-devel-2.0.52-9.7.i386.rpm

安装Subversion

解压SubVersion安装包 (root用户进行下面的操作)
# tar xvzf Subversion-1.4.4.tar.gz

进入解压后的目录

# cd Subversion-1.4.4

配置subversion安装

# ./configure 
--with-apxs=/usr/sbin/apxs 
--prefix=/usr/local/subversion 
--with-apr=/usr
--with-apr-util=/usr 
--with-ssl 
--with-zlib 
--enable-maintainer-mode
# make;make install

创建库文件所在的目录 (svnroot用户进行下面的操作)

# mkdir /home/svnroot/repository

进入subversion的bin目录

# cd /usr/local/subversion/bin

创建仓库”test”

# ./svnadmin create /home/svnroot/repository/test # cd /home/svnroot/repository/test 看看是不是多了些文件,如果是则说明Subversion安装成功了 # cd /usr/local/subversion/bin

在/home/svnroot下创建目录project,project中创建一个文件test.file文件,并执行下面命令,将把路径/home/svnroot/project下找到的文件导入到你创建的Subversion 仓库中去,提交后的修订版为1。 #./svn import /home/svnroot/project file:/home/svnroot/repository/test -m “注释” 不让其他人有该目录的权限 # chmod 700 /home/svnroot/repository 在svn使用过程中牵扯到几种权限:文件系统的权限,linux系统权限,svn用户的权限,apache进程的权限。文件系统的权限,linux系统权限,就是linux系统的文件夹和文件的访问权限。在 svn建立仓库,文件夹,配置文件的时候用svnroot用户,并将仓库权限设置为700,不允许其他用户直接通过 文件系统查看,只能由svnroot进行管理。 ==== 修改Apache配置文件 ==== 启动Apache # service httpd start # vi /etc/httpd/conf/httpd.conf 在最下面添加 LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /svn> DAV svn SVNParentPath /home/svnroot/repository/ svn父目录

 AuthzSVNAccessFile /home/svnroot/repository/authz.conf	//权限配置文件 
 AuthType Basic 											//连接类型设置 
 AuthName "Please input username and password" 			//连接框提示 
 AuthUserFile /home/svnroot/repository/authfile 			//用户配置文件 
 Require valid-user 										//采用何种认证 
 </Location>

其中authfile是通过”htpasswd -c /home/svnroot/repository/authfile username”来创建的,“Require valid-user”告诉apache在authfile中所有的用户都可以访问。

设置环境变量

# export SVN_EDITOR=vi 将该加入到文件/etc/profile中

重启httpd

# service httpd restart 打开浏览器访问http://webserver/svn/test/,如果提示输入用户名和密码则说明安装成功。

Subversion命令行说明

具体用法可参考 Subversion 命令参考手册
http://svnbook.subversion.org.cn/1.2/svn-book.html

Subversion使用

增加用户

如果是第一次创建用户,则是用下面命令:
# htpasswd -c /home/svnroot/repository/authfile username

回车后输入用户密码,完成对用户的增加,以后创建用户可以使用:

# htpasswd /home/svnroot/repository/authfile 用户名

权限分配

# vi /home/svnroot/repository/authz.conf 
[test:/]				//这表示,仓库test的根目录下的访问权限 
user1 = rw 				//test仓库user1用户具有读和写权限 
user2 = r 				//test仓库user2用户具有读权限 
[test2:/] 				//test2仓库根目录下的访问权限 
user1 = r 				//user1用户在test2仓库根目录下只有读权限 
user2 = 				//user2用户在test2仓库根目录下无任何权限 
[/] 					//这个表示在所有仓库的根目录下 
* = r 					//这个表示对所有的用户都具有读权限 
#[groups] 				//这个表示群组设置 
#svn1-developers = user1, user2 //这个表示某群组里的成员 
#svn2-developers = user1 
#[svn1:/] 
#@svn1-developers = rw 			//如果在前面加上@符号,则表示这是个群组权限设置

将这个设置完成后。重启httpd,就可以通过 http://webserver/svn/test 来访问仓库了,当然,受权限的限制,必须是合法用户才能访问且具有相应的权限的仓库。

从仓库中取文件

# /usr/local/subversion/bin/svn checkout file:///home/svnroot/repository/test

注:如果linux的登录用户名密码都和svn的其中一个用户名密码相同时,在checkout的时候不会要求输 入用户名密码直接就可以checkout出来。比如:linux有个用户user1,svn也有一个用户user1,并且密码 都是一样的,当用user1登录linux后,执行checkout,可以直接提取出源码文件,不用输入认证信息。

从仓库中删除一个文件

# /usr/local/subversion/bin/svn delete test.file

提交修改到文件仓库

# /usr/local/subversion/bin/svn commit -m "Update File Log"

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织