1.   SVN介绍

1.1.  简介

SVN(subversion),版本管理工具,与CVS一样,SVN是一个可跨平台的开源版本控制系统,Subversion管理随时间变化的数据。这些数据都被放置在一个档案库(repository)中,它会记录每一次文件的变动,这样我们就可以把档案恢复到旧的版本或者浏览文件的变动记录。除了能够存放程序代码外还可以管理其他任何类型的文件,如文本,视频,图片。

Subversion官网:https://subversion.apache.org

SVN客户端:http://tortoisesvn.sourceforge.net/

SVN中文网站:http://svndoc.iusesvn.com/

中文常见问题解答:https://subversion.apache.org/faq.zh.html

官方手册:http://svnbook.red-bean.com/

1.2.  Svn服务端运行方式

常见的运行方式有以下3种:

  • a、独立服务器,例如:svn://svn.petrochina.org/sadoc
  • b、借助apache,例如:http://svn.petrochina.org/sadoc
  • c、本地直接访问,例如:file:///application/svndata/sadoc

1.3.  Svn客户端访问方式

访问方式 说明
file:/// 直接通过本地磁盘或者网络磁盘访问版本库
http:// 通过WebDAV协议访问支持Subversion的Apache服务器
https:// 与http://相似,但是用SSL加密访问
svn:// 通过TCP/IP自定义协议访问是SVN服务器
svn+ssh:// 通过认证并加密的TCP/IP自定义协议访问svn服务器

1.4.  SVN数据格式

svn存储版本数据有2种方式。BDB(事务安全型表类型)和FSFS(不需要数据库的存储系统)。由于BDB方式在服务器中断时有可能锁住数据,所以还是FSFS方式更安全一点。CVS是基于RCS文件的版本控制系统,每个CVS文件都不过是普通的文件加上一些额外的信息,这类文件会简单重复本地文件的树结构。因此不必担心数据损失,必要的话可以手工修改RCS文件。而SVN是基于关系数据库或一系列二进制文件的(FS_FS),这解决了许多问题(如并行读写共享文件)以及添加了许多新功能,但是数据存储也由此变的不透明。

1.5.  SVN系统逻辑架构图

1.6.  中央式管理的工作流程

这种结构的核心是Server,所有开发人员在工作前要先去服务器端获取代码-->开发-->解决冲突-->提交至服务器。如果脱离了服务器就无法正常工作。

1.7.  运维人员对版本管理系统需要掌握的

  • 安装、部署、维护、排障
  • 简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号
  • 对于版本控制系统,运维人员要相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务

2.   安装配置

2.1.  系统环境

CentOS release 6.6 (Final)
2.6.-.el6.
x86_64

2.2.  安装svn

由于是内部应用,故用yum安装即可。

yum install subversion –y

检查

rpm -qa subversion
subversion-1.6.-.el6_7.x86_64

2.3.  配置启动

建立svn版本库根目录svndata,密码权限目录svnpasswd。

[root@svn ~]# mkdir -p /application/{svndata,svnpasswd}
[root@svn ~]# tree /application/svn*
/application/svndata
/application/svnpasswd directories, files

启动svn服务指定服务的svn根目录

[root@svn ~]# svnserve -d -r /application/svndata/
-d dameon模式

查看svnserver命令帮助

[root@svn ~]# svnserve --help
用法: svnserve [-d | -i | -t | -X] [options] 有效选项:
-d [--daemon] : 后台模式
-i [--inetd] : inetd 模式
-t [--tunnel] : 隧道模式
-X [--listen-once] : 监听一次方式(调试用)
-r [--root] ARG : 服务的根目录
-R [--read-only] : 强制只读;覆盖版本库配置文件
--config-file ARG : 从文件 ARG 读取配置
--listen-port ARG : 监听端口
[方式: daemon, listen-once]
--listen-host ARG : 监听主机名称或IP地址
[方式: daemon, listen-once]
-T [--threads] : 使用线程代替进程 [方式: daemon]
--foreground : 在前台运行(调试用)
[方式: daemon]
--log-file ARG : svnserve 日志文件
--pid-file ARG : 写进程 PID 到文件 ARG
[方式: daemon, listen-once]
--tunnel-user ARG : 隧道用户名(默认是当前UID对应的用户名)
[方式: tunnel]
-h [--help] : 显示本帮助
--version : 显示程序版本信息

查看svn进程

[root@svn ~]# ps -ef |grep svn
root : ? :: svnserve -d -r /application/svndata/
root : pts/ :: grep --color=auto svn
[root@svn ~]# ps -ef |grep svn|grep -v grep
root : ? :: svnserve -d -r /application/svndata/

检查svn端口

[root@svn ~]# netstat -lntup|grep svn
tcp 0.0.0.0: 0.0.0.0:* LISTEN /svnserve
[root@svn ~]# netstat -lntup|grep
tcp 0.0.0.0: 0.0.0.0:* LISTEN /svnserve
[root@svn ~]# lsof -i tcp:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
svnserve root 3u IPv4 0t0 TCP *:svn (LISTEN)

2.4.  建立版本库

创建一个新的subversion项目(版本库)sadoc,

[root@svn ~]# svnadmin create /application/svndata/sadoc
[root@svn ~]# ll /application/svndata/sadoc
总用量
drwxr-xr-x. root root 11月 : conf
drwxr-sr-x. root root 11月 : db
-r--r--r--. root root 11月 : format
drwxr-xr-x. root root 11月 : hooks
drwxr-xr-x. root root 11月 : locks
-rw-r--r--. root root 11月 : README.txt

查看帮助

[root@svn ~]# svnadmin help
一般用法: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
使用“svnadmin help <subcommand>” 得到子命令的帮助信息。
使用“svnadmin --version”查看程序的版本号和文件系统模块。 可用的子命令:
crashtest
create
deltify
dump
help (?, h)
hotcopy
list-dblogs
list-unused-dblogs
load
lslocks
lstxns
pack
recover
rmlocks
rmtxns
setlog
setrevprop
setuuid
upgrade
verify [root@svn ~]# svnadmin help create
create: 用法: svnadmin create REPOS_PATH 在 REPOS_PATH 创建一个新的空版本库。 有效选项:
--bdb-txn-nosync : 在提交事务时禁用fsync [BDB]
--bdb-log-keep : 禁用自动删除日志文件 [BDB]
--config-dir ARG : 从目录 ARG 读取用户配置文件
--fs-type ARG : 版本库类型: “fsfs”(默认)或“bdb”
--pre-1.4-compatible : 使用与1.4之前版本兼容的格式
--pre-1.5-compatible : 使用 Subversion 1.5 之前版本的格式
--pre-1.6-compatible : 使用与 1.6 之前版本兼容的格式

修改配置文件,允许用户zhang读写访问

[root@svn ~]# cd /application/svndata/sadoc/conf/
[root@svn conf]# /bin/cp svnserve.conf svnserve.conf.zhang.$(date +%F) 先备份在修改svnserve.conf
# anon-access = read 12行
# auth-access = write 13行
# password-db = passwd 18行
# authz-db = authz 25行
改为
anon-access = none
auth-access = write
password-db = /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz
------------------------------------------------------------------------------------------
快速修改:
sed -i 's/# anon-access = read/anon-access = none/' /application/svndata/sadoc/conf/svnserve.conf
sed -i 's/# auth-access = write/auth-access = write/' /application/svndata/sadoc/conf/svnserve.conf
sed -i 's/# password-db = passwd/password-db = /application/svnpasswd/passwd/' /application/svndata/sadoc/conf/svnserve.conf
sed -i 's/# authz-db = authz/authz-db = /application/svnpasswd/authz/' /application/svndata/sadoc/conf/svnserve.conf

查看一下,egrep可以同时过滤两个关键字符,相当于grep –E

[root@svn conf]# egrep "\-access|\db =" svnserve.conf
anon-access = none
auth-access = write
password-db = /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz

实现刚才修改的内容

[root@svn conf]# cp authz passwd /application/svnpasswd/
[root@svn conf]# ll /application/svnpasswd/
总用量
-rw-r--r--. root root 11月 : authz
-rw-r--r--. root root 11月 : passwd

改权限

[root@svn conf]# chmod  /application/svnpasswd/*
[root@svn conf]# ll /application/svnpasswd/
总用量 8
-rwx------. 1 root root 1080 11月 12 01:25 authz
-rwx------. 1 root root 309 11月 12 01:25 passwd

编辑passwd和authz

)    vim /application/svnpasswd/passwd
增加:
zhang =
test = ) vim /application/svnpasswd/authz
增加:
#groups
zhang_sa = zhang,test1
zhang_wangguan = test
#project
[sadoc:/] #set project
@zhang_sa = rw
@zhang_wangguan = r
test = r
重启svn
[root@svn svnpasswd]# pkill svnserve
[root@svn svnpasswd]# killall svnserve
svnserve: 没有进程被杀死
[root@svn svnpasswd]# killall svnserve
-bash: kill: all: arguments must be process or job IDs
-bash: kill: svnserve: arguments must be process or job IDs
[root@svn svnpasswd]# svnserve -d -r /application/svndata/
[root@svn svnpasswd]# ps -ef|grep svn
root : ? :: svnserve -d -r /application/svndata/
root : pts/ :: grep svn

74  yum install subversion –y

75  rpm -qa subversion

76  mkdir -p /application/{svndata,svnpasswd}

77  svnserve -d -r /application/svndata/

78  ps -ef |grep svn|grep -v grep

79  netstat -lntup|grep svn

80  svnadmin create /application/svndata/sadoc

81  ll /application/svndata/sadoc

82   cd /application/svndata/sadoc/conf/

83  /bin/cp svnserve.conf svnserve.conf.zhang.$(date +%F)

84  ll

85  vi svnserve.conf

86  egrep "\-access|\db =" svnserve.conf

87  ll

88  cp authz passwd /application/svnpasswd/

89  chmod 700 /application/svnpasswd/*

90  vim /application/svnpasswd/passwd

91  vim /application/svnpasswd/authz

92  pkill svnserve

93  kill all svnserve

94  svnserve -d -r /application/svndata/

95  ps -ef|grep svn

96  svnserve -d --listen-port

97  svnserve --listen-port

98  history


3.   客户端安装TortoiseSVN

安装完毕后2008需重启。

(1)建立一个工作目录,如 。

(2)在工作目录中,选择TortoiseSVN右键菜单“SVN检出”,显示检出对话框,输入cnpack版本库url,检出目录设定为工作目录下的cnpack目录。

输入在svn的passwd里配置的用户名密码,复选框:Save authertication的意思是tortoiseSVN在subversion内的缺省目录(%APPDATA%\Subversion\auth)的三个子目录内保存认证信息。

  • svn.simple包含了基本认证方式所需要的认证信息(用户名和密码),密文保存
  • svn.ssl.server包含了SSL信息
  • svn.username里包含了用户名认证的认证信息

如果想清楚服务器的认证缓存,可以通过TortoiseSVN设置对话框的已保存数据页来实现。如果想清除某一个范围的认证信息,则需要打开那些目录,找到包含要清除的信息的文件并删除。

查看服务器上的内容:

上传和更新在文件的上级目录,即(1)中新建的那个工作目录。


3.   svn命令行的使用说明

3.1.  导入svn原始目录树

[root@svn ~]# mkdir /data/zhang -p
[root@svn ~]# cd /data/zhang/;mkdir trunk branch tags –p #主干,分支,标记#
[root@svn zhang]# tree
.
├── branch
├── tags
└── trunk directories, files

导入svn

网络导入
[root@svn zhang]# svn import /data/zhang svn://192.168.233.150/sadoc/ -m "imp tree" #网络导入
认证领域: <svn://192.168.233.150:3690> 6145f20f-3d6d-40b2-841c-abfdff973c0f
“root”的密码:
认证领域: <svn://192.168.233.150:3690> 6145f20f-3d6d-40b2-841c-abfdff973c0f
用户名: zhang
“zhang”的密码:
本地导入
svn import /data/zhang/ file:///application/svndata/sadoc/
svn import /data/zhang/ svn://192.168.233.150/sadoc/

注意!  你的密码,对于认证域:

   <svn://192.168.233.150:3690> 6145f20f-3d6d-40b2-841c-abfdff973c0f

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。 你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
增加 /data/zhang/trunk
增加 /data/zhang/branch
增加 /data/zhang/tags 提交后的版本为 。

3.2.  从svn库提取数据(Linux为客户端)

二次更新时可不加用户名密码

#svn checkout svn://192.168.233.150/sadoc /data/test --username zhang --password 123456

4.   svn钩子

钩子脚本的具体写法就是操作系统shell脚本程序的写法,可以根据自己svn所在的操作系统和shell程序进行相应的开发,钩子脚本就是被某些版本库事件触发的程序,例如创建新版本或修改为被版本控制的属性,每个钩子都存储足够的信息来了解发生的事件,操作对象以及触发事件用户的账号,根据钩子的输出或者返回的状态,钩子程序能够以某种方式控制该动作是否继续执行,停止或挂起。默认情况下钩子的子目录中包含各种版本库钩子模板。

查看钩子库

#ls -l /application/svndata/sadoc/hooks

常用应用

  • 限制上传文件扩展名及大小
  • SVN更新自动周知,途径有MSN,邮件或者短信
  • SVN更新触发实时rsync。

版本控制系统-SVN(1)的更多相关文章

  1. Linux - 版本控制系统SVN

    0. 摘要 本文通过搭建SVN多版本库为例,介绍SVN的使用. SVN是一个集中式版本控制系统,在服务端部署中央版本库,所有开发人员客户端连接到中央版本库进行代码的提交和更新. Apache Subv ...

  2. 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别

    我觉得最最主要的区别就是:分布式Git主要是在本地有各个历史版本,在不联网的时候,也可以更新到最新版本和查看过去的版本,而集中式SVN是所有人都将版本上传到中央服务器,当出现断网情况的时候,用户只有一 ...

  3. SVN版本控制系统最佳实践

    第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统. ...

  4. linux进阶之SVN集中式版本控制系统篇

    代码上线--版本控制系统 SVN             集中式版本控制系统 git                 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...

  5. 分布式版本控制系统-git

    Git是目前世界上最先进的分布式版本控制系统 SVN是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?这个可以找度娘...... 1.安装Git yum i ...

  6. SVN源代码的版本控制系统使用简介

    SVN是以个开放源代码的版本控制系统,当前最流行的版本控制系统,GIT是近段时间刚兴起的. 下面开始介绍如何安装也配置 1先下载或者从别的地方弄一个安装包(本人是64位的,32位的就用32位的安装包) ...

  7. (转)TortoiseSVN与VisualSVN Server搭建SVN版本控制系统

    本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...

  8. TortoiseSVN与VisualSVN Server搭建SVN版本控制系统

    本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...

  9. SVN版本控制系统

    SVN 版本控制系统 1.SVN作用 防止代码丢失 : 因为没有哪个项目能够一次性开发完成 代码版本回退 : 你可以在开发过程中找到以前上传到服务器上面的所有版本 多人代码整合 : 公司中多个人开发同 ...

随机推荐

  1. 【python】python为何多线程无法切换

    写了一个kafka传输消息,celery发布任务的脚本. 有四个线程,分别读取不同的kafka队列信息 问题是,只有第一个线程会启动,剩下的三个线程连start都运行不了. 而且这个问题不是一开始就发 ...

  2. 直径上的乱搞 bzoj1999求树直径上的结点+单调队列,bzoj1912负权树求直径+求直径边

    直径上的乱搞一般要求出这条直径上的点集或者边集 bzoj1999:对直径上的点集进行操作 /* 给出一颗树,在树的直径上截取长度不超过s的路径 定义点u到s的距离为u到s的最短路径长度 定义s的偏心距 ...

  3. loadrunner获取当前日期、明日日期、昨日日期

    DATE_NOW(现在的日期) TIME_NOW(现在的时间) ONE_DAY(一天的时间) ONE_HOUR(一小时的时间) ONE_MIN(一分钟的时间) 可以使用公式获取昨天明天,例如: DAT ...

  4. Tomcat配置域名/IP访问及其中遇到的问题注意事项

    1.先在tomcat下的conf下找到server.xml文件,用记事本打开后,首先对端口号进行修改,以前一直以为8080是默认的端口号,其实默认的端口号是80 <Connector port= ...

  5. Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]

    解决方法: <select id="selectIf" resultType="student"> SELECT id,name,age,score ...

  6. Tomcat使用

    打开Tomcat官网 在浏览器地址栏输入: tomcat.apache.org,按回车 下载Tomcat 把目光移动至网页左边红匡处,点击Tomcat8 网页下移 点击箭头所指的链接 运行Tomcat ...

  7. 20165323 实验三 敏捷开发与XP实践

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时间:13:45 - 15:25 实验序号:实验 ...

  8. 如何设置Navicat的显示字体与字体大小?

    方法/步骤     打开Navicat   点击[工具]菜单,再选择[选项]   在[选项]界面,点击[外观]下的[字体]   设置网格字体和大小   设置编辑器字体和大小   设置命令列界面字体和大 ...

  9. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开   <style typ ...

  10. 集群部署时的分布式session如何实现

    tomcat + redis 这个其实还挺方便的,就是使用session的代码跟以前一样,还是基于tomcat原生的session支持即可,然后就是用一个叫做Tomcat RedisSessionMa ...