SVN 版本控制服务

1、SVN 简介

SVNSubversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion

CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS

官方网站:http://subversion.apache.org/
Windows客户端 TortoiseSVN:http://tortoisesvn.net/

常见的版本控制软件

CVS,逐渐被SVN取代,是CVX重写版和改写版
SVN,Subversion
Git,Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

GitLab版本管理
GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

SVN 存储数据的方式

BDB,Berkeley DB,一种事务安全型表类型
FSFS,”FSFS” 采用文件系统的方式, 替代原来的基于Berkeley DB的实现.
因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

SVN的运行方式及端口
独立服务器 3690端口 访问方式SVN:// C/S模式
借助apache运行 80端口 访问方式 http://

SVN 工作流程

集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:开始新一天的工作:

  1. 从服务器下载项目组最新代码。
  2. 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码
    (很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
  3. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
    这就是经典的svn工作流程.

2、部署 SVN 服务

2.1 通过yum命令安装svnserve

1
yum -y install subversion

此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行

若需查看svn安装位置,可以用以下命令:

1
rpm -ql subversion

2.2 创建版本库目录

(此仅为目录,为后面创建版本库提供存放位置)

选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:

1
mkdir /var/svnrepos

2.3 创建svn版本库

在第二步建立的路径基础上,创建版本库,命令如下:

1
svnadmin create /var/svnrepos/xxxx

(xxxx为你预期的版本库名称,可自定义)

创建成功后,进入xxxx目录下

1
cd /var/svnrepos/xxxx

进入目录,可以看见如下文件信息:

1
2
3
4
5
6
7
total 24
drwxr-xr-x 2 root root 4096 May 2 13:48 conf
drwxr-sr-x 6 root root 4096 May 2 13:48 db
-r--r--r-- 1 root root 2 May 2 13:48 format
drwxr-xr-x 2 root root 4096 May 2 13:48 hooks
drwxr-xr-x 2 root root 4096 May 2 13:48 locks
-rw-r--r-- 1 root root 229 May 2 13:48 README.txt

2.4 配置修改

进入已经创建好的版本库目录下,也就是前文说创建的xxxx,进入conf

1
cd /var/svnrepos/xxxx/conf

conf目录下,一共存放三份重要的配置文件,如下:

1
2
3
4
total 12
-rw-r--r-- 1 root root 1080 May 2 13:48 authz
-rw-r--r-- 1 root root 309 May 2 13:48 passwd
-rw-r--r-- 1 root root 3090 May 2 13:48 svnserve.conf

authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的用户名单管理
svnserve.conf:svn服务器配置文件

编辑 authz 文件(注意:[/]也是必须的)

img

[/]:表示根目录,即 /var/svnrepos
luo = rw:表示用户luo对根目录具有读写权限。

编辑 passwd 文件

img

如上所示,用户名为:luo,认证密码为:luo123456

编辑 svnserve.conf 文件(注意:配置的前面不能有空格,一定要顶格写)

img
anon-access = none:表示禁止匿名用户访问。
auth-access = write:表示授权用户拥有读写权限。
password-db = passswd:指定用户名口令文件,即 passwd 文件。
authz-db = authz:指定权限配置文件,即 authz 文件。
realm = /var/svnrepos:指定认证域,即 /var/svnrepos 目录。

2.5 配置防火墙规则

添加配置信息

1
2
3
vi /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT

保存退出

1
systemctl restart iptables.service #重启防火墙使配置生效

2.6 启动svn服务器

1
svnserve -d -r /var/svnrepos

启动成功后,可用ps -aux查看服务启动是否成功

1
ps -ef | grep 'svnserve'

img

2.7 客户端访问svn服务器

在windows客户端,输入地址:svn://ip地址:3690/xxxx (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)

弹出输入用户名和密码,输入即可访问

或者在linux服务器输入命令测试:

1
svn co svn://ip地址:3690/xxxx

如下为例子:

img

2.8 遇到的问题小结:

问题1:执行svn命令:svn co svn://ip地址:3690/xxxx报错如下

img

这是因为修改svnserve.conf时,打开注释时,配置的前面有空格,应该顶格写。修改后即可

问题2:输入账号密码后,提示 svn: Authorization failed解决办法

把authz 文件 [/] 改为 []

-------------本文结束感谢您的阅读-------------