SVN(一)

作者: print("") 分类: linux 发布时间: 2017-05-17 13:35


SVN介绍

1、1 什么是SVN(Subversion)?
Svn(subversion)是近年来崛起的版本管理工具、与CVS一样、SVN是一个跨平台的开源版本的控制系统 subversion 管理着随时间改变的数据、这些数据放置在一个中央资料档案库(repository)中、这个档案库像一个普通的文件服务器、不过他会记住每一次文件的变动、这样你可以把档案恢复到旧的版本、或是浏览文件的变动历史
SVN是一个通用的系统、它不但可以用来管理程序源码、他也可以管理任何类型的文件、如文本、视频、图片等等、 http://subversion.apache.org 官方网站

1、2 SVN的服务运行模式与访问方式

1、2、1 服务端运行方式
Svn  服务器常用的有3种运行访问方式

  • 独立服务器(例如:svn://svn.o2oxy.cn/sadoc)
  • 借助apache(例如:http://svn.o2oxy.cn/sadoc
  • 本地直接访问(例如:file://apalicacion/svndata/sadoc)

 
1.2.2 SVN 客户端访问方式
Subversion 可以通过多种方式访问一本地磁盘访问、或各种不同的网络协议、单一个版本库协议用于都是一个URL、URL方案反应了访问方式。
file://            直接版本库访问(本地硬盘或网络磁盘)
http://           通过webdav协议访问支持 subversion的apache服务器
https://      与http:// 相似 但是用了ssl加密
svn://       通过为认证的TCP/IP 自定义协议访问 svnserver服务器
svn+ssh://   通过认证并加密的TCP/P 自定义访问 svnserver服务器
 
1、3 SVN数据格式
svn存储版本数据也有2种方式、BDB(一种事务安全类型)和FSFS(一种不需要数据库)。因为BDB方式在服务器中断时、也可能锁住数据、所以还是FSFS方式更安全一点
CVS 是基于RCS文件的版本控制系统、每个CVS文件都不过是普通文件、加上一些额外信息、这些文件会简单重复本地文件的树结构、因此、不必担心有什么数据损失、如果必须的话可以手工修改RCS文件
SVN是基于关系数据库(BerkleyDB)或一系列二进制文件的(FS_FS),一方面和解决了许多问题(例如:并行读写共享文件)以及添加了许多新功能(例如运行是的事务特性)
然而另一方面、数据吃嫩草由此变得不透明。
 
1、4 SVN系统逻辑架构图
 
   
 
 
 
 
 
 
 
1、5 集中式版本管理系统
SVN 是以一种集中式文件版本管理系统、集中式管理的工作流程如下图:
 
集中式代码管理的和核心是服务器、所有开发组在开始新一天的工作之前必须获取代码、然后开发、最后解决冲突,提交、所有的版本信息都放在服务器上、如果脱离了服务器、开发组就无法工作。
下面举例说明:
开始新一天的工作

  • 从服务器下载项目最新代码、
  • 进入自己的分支、进行工作、每个一小时向服务器上自己的分支提交一次代码(很多人都有则个习惯、因为有时候自己对代码改来该去、最后又想还原到一个小时前的版本、或者看看前一个小时自己修改了那些代码)
  • 下班时间快到了、把自己分支合并到服务器主分支上、一天的工作完成。并反映给服务器、

这就是经典的svn工作流程、从流程上看有缺点也有优点
缺点

  • 服务器压力太大、SVN服务器容量暴增
  • 如果不能连接到服务器上、基本上不可以工作、看上面第二部、如果服务器连接不上、就不能提交、还原、对比等
  • 不适合开源开发、(开发人员非常非常多,但是google app engin 用的就是svn的)。但是一般集中式管理有非常明确权限管理机制(例如分支访问权限)可以实现分层管理。从而很好的解决开发人员众多的问题、

优点:

  • 管理方便、逻辑明确、符合一般人思维习惯
  • 易于管理、集中式服务器更能保证安全性
  • 代码一致非常高
  • 适合开发人数不多的项目开发
  • 大部分软件配置管理的大学教材使用svn和vss

 
2、部署SVN
查看系统版本
[root@mysql1 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@mysql1 ~]# uname -a
Linux mysql1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@mysql1 ~]#
yum 安装svn
[root@mysql1 ~]# yum install -y subversion
启动SVN
svnserve -d -r /applicacation/svndata/  也可以加入pid路径
svnserve -d -r /applicacation/svndata/ –pid-file=/applicacation/svndata/svn.pid
检查
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      58977/svnserve
[root@mysql1 yum.repos.d]# lsof -i:3690
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
svnserve 58977 root    3u  IPv4 109755      0t0  TCP *:svn (LISTEN
2、4 建立版本库
创建一个subversion 项目sadoc、其实啊项目可以创建多个的、这里只是演示而已。
[root@mysql1 yum.repos.d]# svnadmin create /applicacation//svndata/sadoc
查看帮助
svnadmin help
svnadmin help create
 
配置允许liang用户读写访问
cd /applicacation/svndata/sadoc/conf/
cp svnserve.conf svnserve.conf.liang$(date +%F)
[root@mysql1 conf]# egrep “\-access|\-db =” svnserve.conf
# anon-access = read     ####允许匿名访问
# auth-access = write    ##允许可写
# password-db = passwd   ####passwd的存放位置
# authz-db = authz       ####控制权限的数据库
修改为
vim svnserve.conf
anon-access = none   ##12行
auth-access = write   ####13 行
password-db = /applicacation/password/passwd  ###20行
authz-db = /applicacation/password/authz  #27行
把密码认证文件模板考到相关目录(随意)
[root@mysql1 conf]# cp passwd  /applicacation/password/
[root@mysql1 conf]# cp authz /applicacation/password/
[root@mysql1 conf]# ls /applicacation/password/
authz  passwd
[root@mysql1 password]# chmod 700 passwd
[root@mysql1 password]# ll
total 8
-rwx——. 1 root root 1080 May 10 19:18 authz
-rwx——. 1 root root  309 May 10 19:18 passwd
添加用户
vim passwd
liang = 123456
liang2 = 123456
test = 123456
添加用户权限
vim authz
liang = liang   ####用户组
[sadoc:/]       ###项目名称
@liang = rw     ###组的权限
test = r        ###用户的权限
~
重启SVN 命令
Killall svnserver
svnserve -d -r /applicacation/svndata/
重启和关闭svn shell脚本
#!/bin/sh
SVN_DIR=/applicacation/svndata
. /etc/init.d/functions
case “$1” in
restart)
killall svnserve
/usr/bin/svnserve -d -r $SVN_DIR
if [ $? -eq 0 ];then
action “svn YES ” /bin/true
else
action “SVN NO” /bin/false
killall svnserve
fi
;;
stop)
killall svnserve
if [ $? -eq 0 ];then
action “STOP YES” /bin/true
fi
sleep 2
;;
*)
echo “Usage: $0 {restart|stop}”
exit 1
esac
exit 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

说点什么

avatar
  Subscribe  
提醒