天天看点

Subversion版本控制

Subversion版本控制

一、简介

二、svnserve

三、SSH+SVN

四、Apache+SVN

一、简介:

Subversion是一款自由开放的版本控制软件。Subversion可以管理文件、文件夹以及记录它们的修改状况。Subversion常用来帮助我们管理软件开发的源代码或是公司手册文档。

Subversion通过将文档导入至版本库中进行管理,版本库类似于文件服务器,但比文件服务器更强大的是它可以记录你每一次对文件或目录的修改状况,并提供还原数据至老版本的功能。

版本控制概念图:

Subversion版本控制

Subversion框架图:

Subversion版本控制

从图中可以看出服务端保存着Subversion版本库,客户端通过命令或图形界面连接服务端,并建立本地“工作拷贝”(从服务端将版本库中的资料拷贝至本地)。

客户端访问服务端时可以通过简单的svnserve访问、file本地访问、Apache间接访问。

1.svnserve是一个小巧、轻便的服务器程序,通过它客户端可以使用Subversion专有的协议进行访问,其特点是设置简单。

2.由于svnserve本身并不提供加密通讯的功能,所以如果你需要更安全的连接,可以使用svnserve+ssh的方式,通过连接SSH服务器建立在SSH隧道,在通过SSH调用svnserve程序。

3.Apache通过mod_dav_svn访问版本库,使得客户可以通过访问Apache取得版本库资料进行版本控制。

Subversion服务器对比图:

Subversion版本控制

二、svnserve示例(本文环境为CentOS6.2):

    1. 安装Subversion

    [root@centos6 ~]# yum -y install subversion

    2. 创建版本库

提示:这里计算机中提前有一个目录/shells,里面存放着公司的通用脚本,公司准备将其版本化。

    [root@centos6 ~]# mkdir /var/svn

    [root@centos6 ~]# svnadmin create /var/svn/project1

    //project1目录将自动创建,并初始化版本库,此时版本库无版本文件

    [root@centos6 ~]# svn import /shells  file:///var/svn/project1 -m "Initial DATA"

    //将shells目录中的文件导入版本库,使其版本化。-m后跟说明性字符串,可任意输入。

提示:这里file:///var/svn/project1即通过本地访问版本库,并导入数据至版本库。

    此时,版本库已经创建完成,并成功导入了我们的脚本文件(工作中你可以导入自己的任何文件)。但如果你需要访问版本库却仅可以通过本地file的方式访问,访问方法如下:

    [root@centos6 ~]# svn list file:///var/svn/project1/         //列出版本库中的文件列表

    [root@centos6 ~]# mkdir /test; cd  /test                     //创建本地拷贝目录

    [root@centos6 ~]# svn checkout file:///var/svn/project1    //将版本库中的文件拷贝至本机

提示:在本机保存一份本地拷贝后,以后即就当作普通文件对其进行修改,修改完成后随时可以上传回版本库,更新版本库。

      方法是:svn commit -m "Log"

    这里我们需要的是客户可以通过网络从远程访问版本库,如上所述方法可以有多种,我们先看第一种简单的svnserve方式。

    3. 启动svnserve服务的方式

    [root@centos6 ~]# svnserve -d

     //作为守护进程启动svnserve服务,默认监听端口3690,如果有防火墙注意防火墙设置

     svnserve运行后,会将所有的版本库发布至网络(如果有多个版本库的话)

     客户端需要指定据对路径访问版本库如svn://centos.example.com/var/svn/project1

    [root@centos6 ~]# svnserve -d -r /var/svn/project1      //限制仅发布project1一个版本库至网络

    客户端可以使用相对路径访问版本库如svn://centos.example.com/project1

    4. 认证与授权

    当客户端访问版本库时服务器会读取版本库中的conf/svnserve.conf中定义的认证与授权策略实现权限控制。

    [root@centos6 ~]# cat /var/svn/project1/conf/svnserve.conf

    下面我们来看看passwd与authz文件格式:

    [root@centos6 ~]# cat /var/svn/project1/conf/passwd

    [root@centos6 ~]# cat /var/svn/project1/conf/authz

   提示:如果你启动svnserve时通过-r指定了版本库,这是svnserve仅提供一个版本库给网络,对目录设置权限时可以不指定版本库的名称。

    如果你启动svnserve时为指定版本库,即svnserve提供多个版本库给网络,这是设置路径权限时需要指定版本库的名称。

    实例1:使用svnserve -d -r /var/svn/project1启动Subversion服务,

           如果需要指定目录设置权限路径应该为[/]或[/test],即这里的根(/)仅表示project1版本库,/test表示project1下的test目录。

    实例2:使用svnserve -d启动Subversion服务,即发布所有的版本库至网络,

           如果需要指定目录设置权限路径应该为[projet1:/]或[project2:/test],即这里的[project1:/]仅表示project1版本库的根,[project2:/test]表示project2下的test目录。

    5. 客户端访问:

    客户端我们使用Windows下的TortoiseSVN图形工具,可以在http://tortoisesvn.net/downloads.html网站下载该程序。

    效果如图:

Subversion版本控制
Subversion版本控制
Subversion版本控制
Subversion版本控制
Subversion版本控制

三、SSH+SVN示例

    这种模式需要提前设置SSH服务,通过SSH服务调用SVN服务程序,所以svnserve不需要手动启动,客户端通过svn+ssh://centos.example.com/svn/project1访问。

    客户端程序通过ssh程序连接版本库主机,使用SSH认证(服务器系统用户名与密码),服务端接到某用户的ssh连接后会以该用户的身份启动svnserve。

    这种模式svnserve.conf还是可以进行权限控制的。

    1. 服务端启动SSH服务

    [root@centos6 ~]# service sshd start

    2. 服务端创建版本库

    3. 客户端访问效果如图:

    1)通过TortoiseSVN图形工具访问:

Subversion版本控制
Subversion版本控制
Subversion版本控制

    2)通过命令行访问(一台rhel6.2系统)

Subversion版本控制
Subversion版本控制

    Apache是非常流行的Web服务器软件。它可以运行在几乎所有的计算机平台上。通过Apache发布Subversion的版本库,使得用户可以通过HTTP协议访问版本库。

    以下为使用Apache发布Subversion版本库的若干理由:

    1.Subversion可以使用Apache自身集成的多种认证方式。

    2.不需要创建系统用户。

    3.完善的Apache日志可。

    4.可以通过SSL加密网络传输的数据。

    5.HTTP(S)可以穿越企业防火墙。

    6.坚定地通过浏览器访问版本库。

    准备工作:安装Apache,加载mod_dav及mod_dav_svn模块,Apache需要这两个模块管理Subversion版本库。

    本文以yum方式安装这些软件,环境为CentOS6.2。

    [root@centos6 ~]# yum -y install httpd

    [root@centos6 ~]# yum -y install mod_dav_svn

    安装完成后你可以通过以下方法查看dav模块是否加载成功:

    vim /etc/httpd/conf/httpd.conf

    查看是否包含LoadModule dav_module modules/mod_dav.so

    vim /etc/httpd/conf.d/subversion.conf

    查看是否包含LoadModule dav_svn_module modules/mod_dav_svn.so

    如果你还需要Subversion自带的基于目录的权限控制的话,可以通过加载mod_authz_svn实现。

    接下来通过修改Apache配置文件实现网络化版本库:

    root@centos6 ~]# mkdir /var/svn

    [root@centos6 ~]# vim /etc/httpd/conf.d/subversion.conf

    [root@centos6 ~]# chown -R apache.apache  /var/svn/                //修改权限

    [root@centos6 ~]# chcon -R -t httpd_sys_content_t  /var/svn   //仅在SELinux开启时使用

    [root@centos6 ~]# htpasswd -c /var/svn/.pass  jerry        //创建帐号文件,并添加用户jerry

    [root@centos6 ~]# service httpd start

    客户端访问效果如图:

Subversion版本控制
Subversion版本控制
Subversion版本控制
Subversion版本控制
上一篇: 环境变量
下一篇: keil版本控制

继续阅读