一、前言
Subversion是一个免费的开源的版本管理系统,它是作为CVS(Concurrent Versions System)的取代品出现的。本文简单介绍了Subversion在centos上的安装过程及其基本概念和使用方法。
二、安装
安装命令:
yum -y install subversion
安装完用命令:
svn –version
查看一下是否安装成功,如果成功则显示
svn, version 1.6.11 (r934486) compiled Aug 17 2015, 08:37:43 …
三、项目目录结构及导入
一般来说会在一部服务器上面管理多个项目,但是想让各个项目之间相互独立,这种情况最好为不同的项目建立不同的仓库进行管理。譬如现在有两个项目,名字分别为hello和world,接下来以hello为例子进行建仓和导入。
1. 建立本地工程的仓库
Subversion把工程的各个版本的数据集中放在一个仓库(repository)中。假定我们要建立一个本地工程,叫做hello,为了使用subversion对它进行版本管理,首先要为该工程建立一个仓库。
subversion安装后会生成一个~/.subversion目录,这里,我们将工程hello的数据仓库建立在~/.subversion/repos/hello目录。
[root@localhost ~] cd ~/.subversion/
[root@localhost .subversion] mkdir respos
[root@localhost .subversion] svnadmin create repos/hello
[root@localhost .subversion] ls –p repos/hello/
conf/ dav/ db/ format hooks/ locks/ README.txt
2. 组建本地工程工作目录
假定工程hello的顶层目录为~/projects/hello(这里~代表/root),则应如下组建工程的工作目录:
~/projects/hello/branches
~/projects/hello/tags
~/projects/hello/trunk/
hello.c
/trunk目录是实际上的工程顶层目录,工程中的所有文件和文件夹都在该目录下组织。
[root@localhost ~]# cd projects/hello/
[root@localhost ~]# ls -p branches/ tags/ trunk/
关于标准目录结构:
trunk是主分支,是日常开发进行的地方。
branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。
tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。
详情请参考:http://www.cnmiss.cn/?p=296
3. 将本地工程hello导入本地的Subversion的工程仓库
注意,完成导入后,原目录~/projects/hello并不转换为“工作副本(working copy)”,而且该项目已经转由该仓库接管,即该仓库中已经包含了首次导入的工程的所有信息,与源目录~/project/hello再无任何关系,我们完全可以删除这一目录而不必担心丢失工程项目数据。注意,如果源目录并不是一个“工作副本”,那么就无法用svn进行管理,在其中所作的任何变动都无法提交到仓库。
要用subversion对工程进行版本管理,那么工程项目的开发必须在一个“工作副本”中进行,即首先要从仓库获取一个“工作副本”。
4. 工程开发过程中的版本管理与控制
使用subversion对工程进行版本管理的一般流程如下:
a)建立工程的数据仓库,并导入工程的最初版本(前面已经完成);
b)从仓库获取一个“工作副本”(svn checkout,可以获取最新版本也可以获取以前的某个版本),在这个“工作副本”中进行工程开发,修改完毕将变动提交到仓库。
下面简单介绍b)步骤。
由于工程hello已经导入到仓库,因此原目录可以删除。我们删除原目录,并从仓库获取工程hello的一个“工作副本”(working copy);当然,如果你当心这样做会造成数据丢失,完全可以重新建立一个目录,将“工作副本”保存到那里。
至此,我们在仓库根目录~/.subversion/repos建立了仓库hello,并将本地工程导入仓库中,最后在本地目录获取仓库的一个工作副本。可以同样用这个方法建立其他仓库。
四、权限管理及配置
新建一个仓库之后,在仓库目录下面(这里是~/.subversion/repos/hello/)会有一个conf目录,里面有三个文件,分别是
authz:权限配置文件
passwd:用户名口令文件
svnserve.conf:svn服务配置文件
这里,因为开发人员会参与多个项目,所以我们希望权限配置文件和用户口令文件是公用的,我的做法是在.subversion目录下新建多一个目录repos_conf,把authz和passwd文件复制过去,根据实际情况进行配置。
修改各个仓库下面的svnserve.conf文件,该文件配置项分为以下5项:
anon-access: 控制非鉴权用户访问版本库的权限。
auth-access: 控制鉴权用户访问版本库的权限。
password-db: 指定用户名口令文件名。
authz-db:指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
realm:指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件
修改如下:
然后以默认监听端口(3690)启动svn服务:
svnserve -d -r /root/.subversion/repos
参数-d表示以守护进程运行,-r后面接服务的根目录,如果需要绑定别的端口,则在后面加上--listen-port 端口号。
关闭服务:
killall svnserve
注意,如果修改了svnserve.conf文件,需要重启服务,authz和passwd则不用。
五、总结
svn的搭建及配置流程总体如下:
1. 安装svn服务端
2. 按照标准目录结构创建本地工程目录
3. 将本地工程导入仓库
4. 删除原目录,在本地获取主分支的工作副本
5. 权限和口令文件配置,svnserve.conf配置
6. 启动svn服务
参考:
http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251581.html