版本控制系统-SVN(1)
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/
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)的更多相关文章
- Linux - 版本控制系统SVN
0. 摘要 本文通过搭建SVN多版本库为例,介绍SVN的使用. SVN是一个集中式版本控制系统,在服务端部署中央版本库,所有开发人员客户端连接到中央版本库进行代码的提交和更新. Apache Subv ...
- 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别
我觉得最最主要的区别就是:分布式Git主要是在本地有各个历史版本,在不联网的时候,也可以更新到最新版本和查看过去的版本,而集中式SVN是所有人都将版本上传到中央服务器,当出现断网情况的时候,用户只有一 ...
- SVN版本控制系统最佳实践
第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统. ...
- linux进阶之SVN集中式版本控制系统篇
代码上线--版本控制系统 SVN 集中式版本控制系统 git 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...
- 分布式版本控制系统-git
Git是目前世界上最先进的分布式版本控制系统 SVN是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?这个可以找度娘...... 1.安装Git yum i ...
- SVN源代码的版本控制系统使用简介
SVN是以个开放源代码的版本控制系统,当前最流行的版本控制系统,GIT是近段时间刚兴起的. 下面开始介绍如何安装也配置 1先下载或者从别的地方弄一个安装包(本人是64位的,32位的就用32位的安装包) ...
- (转)TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- SVN版本控制系统
SVN 版本控制系统 1.SVN作用 防止代码丢失 : 因为没有哪个项目能够一次性开发完成 代码版本回退 : 你可以在开发过程中找到以前上传到服务器上面的所有版本 多人代码整合 : 公司中多个人开发同 ...
随机推荐
- Practical Web Penettation Testing (the first one Mutillidae 大黄蜂 之二)
1.how to use dpkg cmmand first it can be used for list all software , dpkg -l (由于kali linux 没有启动所以 ...
- tensorflow(2):神经网络优化(loss,learning_rate)
案例: 预测酸奶的日销量, 由此可以准备产量, 使得损失小(利润大),假设销量是y , 影响销量的有两个因素x1, x2, 需要预先采集数据,每日的x1,x2和销量y_, 拟造数据集X,Y_, 假设y ...
- 20165206 2017-2018-2 《Java程序设计》第8周学习总结
20165206 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 进程:进程是程序的一次动态执行过程,对应了从代码加载.执行至执行完毕的一个完整过程,这个过程 ...
- 20165328 预备作业3 Linux安装及命令
Linux安装及学习 Linux安装遇到的问题: 问题:在我开始安装虚拟机的时候,在安装过程中总会出现初始界面,且无法跳过,陷入死循环. 解决方法:我在网上百度搜索该问题之后得到了答案,第一个界面是要 ...
- Spring Boot 导出Excel表格
Spring Boot 导出Excel表格 添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi& ...
- base | Thread类、ThreadData结构体 、CurrentThread命名空间
__thread __thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比.__thread变量每一个线程有一份独立实体,各个线程的值互不干扰.可以用来修饰那些带有全局性且值可能变, ...
- ElasticSearch搜索解析
这篇介绍稍多,篇幅可能有点多,下面会针对一些重要的点做一些小测试 搜索返回文档解析 hits搜索返回的结果中最重要的一部分其中包含了 索引信息(_index,_type,_index,_source, ...
- vue.js学习:1.0到2.0的变化(区别)
一.生命周期 1.1.0的生命周期: 周期 解释 init 组件刚刚被创建,但Data.method等属性还没被计算出来 created 组件创建已经完成,但DOM还没被生成出来 beforeComp ...
- Visual Studio "14" CTPs
下载地址:http://www.visualstudio.com/en-us/downloads/visual-studio-14-ctp-vs 上张有亮点的图: 实现亮点的方法(Remo ...
- Visual Studio 2012 Update 3
不知道是不是都关注Win8.1和Visual Studio 2013 preview去了… 貌似没大有人发现2012的update3在update2后2月就出了… ms明显加快了开发速度额… KB a ...