目录
    
   
    
     
      1
     
     、Linux上subversion下载
    
   
    
     在
    
    
     Linux
    
    
     上运行的
    
    
     SVN
    
    
     是将服务端和客户端绑定在
    
    
     subversion
    
    
     里面的,所以下载的时候只需要下载一个
    
    
     subversion
    
    
     的
    
    
     tar
    
    
     包。
    
   
    Windows上SVN客户端官网:
    
     https://tortoisesvn.net/
    
   
    Linux上SVN官网:
    
     
      
       http://subversion.apache.org/
      
     
    
   
进入SVN客户端TortoiseSVN官网(也可以直接进入Linux上SVN官网)
     
   
点击Apache™ Subversion (SVN)® 进入Apache的版本控制页
     
   
点击Source Download 进入下载页
     
   
或者在该下载页的下面有当前最新版和当前上一个版本,以及发布存档库
     
   
点击archive download site进入旧版本仓库
     
   
选择需要的版本直接点击下载,或者复制链接保存,再到Linux上进行下载。
复制subversion-1.10.2.tar.gz版本链接
| http://mirrors.hust.edu.cn/apache/subversion/subversion-1.10.2.tar.gz | 
复制subversion-1.9.9.tar.gzz版本链接
| http://mirrors.hust.edu.cn/apache/subversion/subversion-1.9.9.tar.gz | 
    
     
      2
     
     、Linux上subversion的安装
    
   
    
     
      2.1
     
     、查询系统之前安装的旧版本
    
   
| svn –version | 
     
   
自己决定是否卸载
卸载命令
| yum remove subversion | 
     
   
查看是否卸载完成
| [root@localhost ~]# svn –version | 
     
   
卸载完成
    
     
      2.2
     
     、yum安装yum源默认版本
    
   
查看yum源中subversion的版本
| [root@localhost ~]# yum list subversion | 
     
   
执行yum源安装subversion
| [root@localhost ~]# yum -y install subversion | 
     
   
查询安装是否完成
| [root@localhost ~]# svn –version | 
     
   
安装完成。
    
     
      2.3
     
     、yum安装自定义版本
    
   
在yum源配置文件中配置自己需要的软件版本yum源。
    
     http://opensource.wandisco.com/
    
    这个网址是wandisco整理的rpm包,在这个网址下有各种版本的subversion。
   
subversion1.10版本的rpm包地址:
    
     http://opensource.wandisco.com/centos/7/svn-1.10/RPMS/
    
   
在该路径下是subversion通过yum源安装的配置文件和rpm包以及当前版本的依赖。
卸载旧版本
| [root@localhost ~]# yum remove subversion | 
     
   
清除yum缓存
    
     yum
    
    
     会把下载的软件包和
    
    
     header
    
    
     存储在
    
    
     cache
    
    
     中,而不自动删除。如果觉得占用磁盘空间,可以使用
    
    
     yum clean
    
    
     指令进行清除,更精确
    
    
     的用法是
    
    
     yum clean headers
    
    
     清除
    
    
     header
    
    
     ,
    
    
     yum clean packages
    
    
     清除下载的
    
    
     rpm
    
    
     包,
    
    
     yum clean all
    
    
     一全部清除。
    
   
| [root@localhost ~]# yum clean all | 
     
   
在yum配置文件中添加设置subversion1.10的yum源
查看系统yum源配置文件
| [root@localhost ~]# cd /etc/yum.repos.d/ | 
     
   
备份系统默认的yum配置文件(复制一份并添加文件后缀名为.back)
| [root@localhost yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.back | 
     
   
备份完成
用编辑器打开该配置文件
| [root@localhost yum.repos.d]# vi CentOS-Base.repo | 
     
   
在文件中追加配置
| [WandiscoSVN] name=Wandisco SVN Repo baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.10/RPMS/$basearch/ enabled=1 gpgcheck=0 | 
     
   
保存退出
查看添加配置后yum源中可以安装的subversion的版本
| [root@localhost yum.repos.d]# yum list subversion | 
     
   
安装subversion
| [root@localhost ~]# yum -y install subversion | 
     
   
查看安装
| [root@localhost ~]# svn –version | 
     
   
安装高版本替换低版本成功
    
     
      3
     
     、Linux上SVN服务端和客户端环境搭建
    
   
    
     
      3.1
     
     、服务端命令与客户端命令
    
   
在subversion中包含有服务端和客户端,在执行命令时需要分清服务端命令和客户端命令。
    
     服务端命令:
    
   
svnserver #控制svn系统服务的启动等
svnadmin #svn版本库的创建/导入/导出/删除等
svnlook #查看版本库的信息
    
     客户端命令:
    
   
svn #版本库的检出/更新/提交/重定向等
    
     
      3.2
     
     、版本库的创建与删除
    
   
    
     创建保存版本库的目录
    
   
例:
在/usr/local/创建svn的保存版本库的目录SvnRepository
| [root@localhost ~]# mkdir /usr/local/SvnRepository | 
     
   
    
     创建svn
    
    
     版本库
    
   
    
     svnadmin create
    
    
     路径
    
   
版本库没有指定一定需要创建在某个目录下
| [root@localhost ~]# svnadmin create /usr/local/SvnRepository/testrpo #在/usr/local/SvnRepository/目录下创建testrpo版本库 | 
     
   
在创建的这个版本库下会自动创建svn相关的配置文件
创建版本库时可以配置的参数:
–fs-type #用来指定版本库数据保存类型,该参数的类型有fsfs和dbd,推荐使用fsfs数据类型。
例如:在/usr/local/SvnRepository/目录下创建testrpo1版本库并指定版本库保存数据的类型为fsfs。
     
   
    
     删除版本库:
    
   
    
     rm -rvf
    
    
     版本库路径
    
   
直接使用Linux的删除命令将版本库删除即可
例:删除/usr/local/SvnRepository/目录下的testrpo2版本库
| [root@localhost SvnRepository]# rm -rvf testrpo2 | 
     
   
    
     
      3.3
     
     、版本库配置及权限分组
    
   
    版本库的配置:
    
    版本库的配置文件位于创建的版本库的目录下的conf目录下
   
     
   
该目录下文件保存的信息分别为:
authz:配置用户组合用户组的权限
passwd:配置用户名和用户密码
svnserve.conf:配置默认权限、权限配置文件及密码配置文件
    
     svnserve.conf
    
    
     配置文件
    
   
使用编辑器打开svnserve.conf文件
| [root@localhost conf]# vi svnserve.conf | 
     
   
将注释掉的重要配置信息解注释,更改未通过验证的用户权限为none,其他配置为默认
     
   
更改完成保存退出。
    
     passwd
    
    
     配置文件:
    
   
使用编辑器打开passwd文件
| [root@localhost conf]# vi passwd | 
     
   
添加用户zxr密码为123456
     
   
添加完成保存退出。
    
     authz
    
    
     配置文件:
    
   
使用编辑器打开authz文件
| [root@localhost conf]# vi authz | 
     
   
用户组(group)配置,该配置的格式为组名等于用户名列表,每个用户需要用逗号隔开,每一行表示一个用户组。
配置组的权限时需要在组的前面加上@符号
例:
    
     用户组配置:
    
   
配置用户组pm,组员为zxr
配置用户组dev,组员为zxr0,zxr1,zxr2
配置用户组rookie,组员为zxr3
| pm = zxr dev = zxr0,zxr1,zxr2 rookie = zxr3 | 
     
   
    
     指定根目录配置用户组权限:
    
   
pm组具有读写权限(rw),dev组只有读权限(r),rookie组只有读权限(r),
此处的读(r)表示:在客户端可以跟新服务器上的代码到本地
此处的写(w)表示:在客户端可以提交代码到服务器
| [/] @pm = rw @dev = r @rookie = r | 
     
   
    
     指定版本库配置权限:
    
   
配置testrpo版本库权限为pm组可读写(rw),用户zxr1可读写(rw),用户zxr2只能读(r),用户zxr3无权限
| [testrpo:/] @pm = rw zxr1 = rw zxr2 = r zxr3 = | 
     
   
    
     指定版本库下的某个目录或文件权限配置:
    
   
配置testrpo版本库下的test01目录的权限为所有人可读写(rw)
| [testrpo:/test01] * = rw | 
*表示所有用户
     
   
全部配置如图
     
   
配置完成保存退出。
    
     
      3.4
     
     、版本库的访问
    
   
svn是属于集中式的版本库解决方案,访问拓扑图:
     
   
SVN是跨平台的,可以在任何系统上访问SVN服务器上的内容。
    
     
      3.4.1
     
     、启动
    
   
指定启动运行创建的版本库testrpo
[root@localhost ~]# svnserve -d -r /usr/local/SvnRepository/testrpo
     
   
    
     
      3.4.2
     
     、windows客户端的访问:
    
   
在Windows上安装与服务端相同版本的svn的客户端(TortoiseSVN)。安装完成之后创建一个文件夹存放从服务器检出的svn版本库。
创建版本库为SVNRepo
     
   
进入SVNRepo目录,点击鼠标右键,点击SVN Checkout(检出),填写URL,点击确定。
     
   
弹出用户认证信息
     
   
填写完成用户信息点击确定。弹出检出过程。
     
   
检出完成,点击确定。此时该目录下会出现一个隐藏文件.svn
     
   
此时链接svn的服务器端成功
    
     
      注意:在此链接过程中,如果出现链接不上,首先需要先
     
     
      telnet
     
    
    
     
      一下当前
     
     
      svn
     
    
    
     
      服务器的
     
     
      3690
     
    
    
     
      端口号,看端口是否开通,如果端口是通的,可能是
     
     
      svn
     
    
    
     
      服务器与客户端的版本不兼容,如果端口不通,需要开通
     
     
      svn
     
    
    
     
      服务器上的
     
     
      3690
     
    
    
     
      端口。
     
    
   
    
     
      centos7
     
    
    
     
      使用的防火墙为
     
     
      firewalld
     
    
    
     
      开放端口方法是:
     
    
   
| [root@localhost ~]# firewall-cmd –zone=public –add-port=3690/tcp –permanent | 
#开通防火墙3690端口号
| [root@localhost ~]# systemctl restart firewalld.service | 
#重启防火墙服务
| [root@localhost ~]# firewall-cmd –zone=public –list-ports | 
#查看所有打开的端口
1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
    
     
      3.4.3
     
     、Linux上客户端的访问
    
   
在Linux上svn服务器上保存的是二进制文件,所以在svn服务器的版本库中看不到提交到svn服务器上的文件,只有通过Linux上的客户端才能看到svn版本库中的文件。
在/usr/local/目录下创建svn工作副本文件svnwork
[root@localhost local]# mkdir /usr/local/svnwork
进入创建的工作副本svnwork
[root@localhost local]# cd svnwork/
    
     检出svn
    
    
     版本库
    
   
[root@localhost svnwork]# svn checkout svn://192.168.244.128
查看工作副本中的文件
[root@localhost svnwork]# ls
     
   
    
     更新版本库(必须先进入到检出的目录下执行该更新命令,否则会报错没有找到工作副
    
    本)
   
[root@localhost svnwork]# svn update
     
   
    
     提交文件
    
   
[root@localhost svnwork]# touch cl.txt #在当前svn工作副本中创建文件cl.txt
编辑cl.txt文件
[root@localhost svnwork]# vi cl.txt
     
   
编辑完毕保存退出
添加文件cl.txt文件到当前工作副本的svn库中
[root@localhost svnwork]# svn add cl.txt
     
   
向svn服务器提交cl.txt文件
提交命令; svn commit -m “注释” 需要提交的文件
[root@localhost svnwork]# svn commit -m “commit create file cl.txt” cl.txt
-m “commit create file cl.txt”表示注释
     
   
提交成功,在Windows上的客户端中检测是否提交成功
进入Windows上的svn检出工作副本,右键鼠标,点击svn checkout
     
   
     
   
更新成功会,会看到在Linux上的客户端提交的文件。
    
     
      3.4.3
     
     、重启
    
   
    
     首先查看svn
    
    
     的进程:
    
   
    
     查看进程命令:
    
    
     ps -ef
    
    
     (查看所有进程);要筛选的话用
    
    
     grep
    
    
     ,
    
   
    
     筛选
    
    
     svn
    
    
     的进程命令:
    
    
     ps -ef|grep svn
    
   
[root@localhost SvnRepository]# ps -ef|grep svn
     
   
    
     杀死主进程:
    
   
    
     杀死进程的命令用
    
    
     kill -9
    
    
     进程
    
    
     id
    
   
[root@localhost SvnRepository]# kill -9 12444 #杀死进程ID12444
     
   
    
     启动svn
    
    
     :
    
   
    
     启动
    
    
     svn
    
    
     的命令用
    
    
     svnserve -d -r
    
    
     创建的版本库路径
    
   
    
     -d
    
    
     表示
    
    
     svnserve.exe
    
    
     作为服务程序运行在后台;
    
    
     -r
    
    
     表示将创建的版本库的目录当作根目录。
    
   
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/testrpo
#启动运行版本库/usr/local/SvnRepository/testrpo
     
   
在此查看svn进程
     
   
重启成功。
    
     
      3.5
     
     、svn服务自动启动
    
   
只需要在系统文件/etc/rc.local文件中添加启动软件的命令,就可以实现开机自动启动,因为系统启动以后会加载这个文件。
启动运行指定版本库的命令:
svnserve -d -r /usr/local/SvnRepository/testrpo
使用编辑器打开/etc/rc.local文件进行编辑
[root@localhost ~]# vi /etc/rc.local
添加启动命令
svnserve -d -r /usr/local/SvnRepository/testrpo
     
   
保存退出。
查看/etc/rc.local这个文件是否拥有执行权限,这个文件在centos7中默认是没有执行权限的,如果没有执行权限,开机是不能够执行该文件的,因此需要赋予执行权限(x)
    
     [root@localhost ~]# chmod +x /etc/rc.d/rc.local
    
    #授予/etc/rc.d/rc.local文件写的权限,/etc/rc.local这个文件只是/etc/rc.d/rc.local的快捷方式。
   
    
     [root@localhost ~]# reboot            #
    
    
     重启系统
    
   
    
     [root@localhost ~]# ps -ef|grep svn               #
    
    
     查看svn
    
    
     的进程
    
   
     
   
开机自动启动成功
    
     
      4
     
     、svn的基本操作
    
   
    
     
      4.1
     
     、svn的常见术语及文件状态
    
   
    
     常见术语:
    
   
版本库、检出、工作副本、更新、提交、版本、版本号
    
     文件状态:
    
   
无版本控制、增加、修改、常规、冲突、删除、锁定
     
   
研发A在客户端的工作副本中新建文件或文件夹后的状态为:无版本控制
     
   
此时该文件并未加入版本控制中
要对“无版本控制”的文件加入到版本控制中需要执行“增加(add)”操作
     
   
此时该文件状态称为“增加”
要对“增加”的文件加入到版本控制中需要执行“提交(commit)”操作,
     
   
执行提交操作以后服务器收到该文件以后进行保存操作,完成后将版本号加1,并向工作副本发送一个反馈信号,客户端收到该信号以后,也将自己的工作副本加1,同时将提交的文件又变成“常规”状态
     
   
当研发B进行了更新操作
     
   
研发B对文件进行了修改,此时文件的状态变为“修改”状态
     
   
此时研发B向服务端提交了这些文件
     
   
以后,服务端保存后,版本号加1,变为了2,并且客户端二的版本也变成了2,此时它的文件也变成“常规”状态
     
   
当研发三执行更新操作,默认更新得到的数据就是最新版本的数据,因此更新到了版本2,直接跳过了版本1,如果在更新的时候指定参数版本号,可以指定更新到指定的版本。
     
   
    
     
      4.2
     
     、checkout与export的区别于使用
    
   
checkout 表示检出
export 表示导出
checkout检出的工作副本目录中包含.svn文件夹,也就是checkout检出的工作副本中存在.svn的文件,检出后的文件是在版本控制之下的
export导出的工作副本目录中没有.svn文件夹,也就是单存的项目文件,没有.svn的文件夹,并且导出后的文件不在版本控制之下,所以export导出的文件不能称之为工作副本,因为.svn文件标记着工作副本的一切变化,如果是需要导出项目给客户演示的话,直接导出就可以了,就不需要用到版本控制。
例:
    
     svn checkout -r 2                       #
    
    
     检出版本2
    
   
    
     svn export -r 3                            #
    
    
     导出版本3
    
   
    
     
      4.3
     
     、add、ci、up、del
    
   
    
     add
    
    
     :添加文件到版本控制
    
   
svn add 文件目录名 –non-recursive #只增加指定的目录,不增加文件目录下的文件
svn add * #增加当前目录下的所有文件到版本控制中,如果是目录增加了,目录下的文件没有增加,那该命令不会扫描已增加的目录下未增加的文件
svn add * –force #强制执行添加所有没有添加到版本控制中的文件或文件目录
    
     commit
    
    
     (ci
    
    
     ):提交修改到服务端(创建一个新版本号)
    
   
svn commit -m “备注” 文件名 #提交指定文件到svn服务器(-m参数是必须要加的参数)
svn commit -m “备注” * #提交当前目录下所有修改过的文件
    
     update
    
    
     (up
    
    
     ):更新工作副本
    
   
svn update #更新工作副本(默认情况下,每个文件只会从服务端更新一次最新版本)
svn update * #强制更新所有文件为最新版本
svn update -r 版本号 文件名 #指定更新到某个版本号
    
     delete
    
    
     (del
    
    
     ):从版本库中删除文件或目录
    
   
svn delete 文件名 #从版本库中删除文件或目录
svn delete -m “备注” 文件名 #删除文件时添加备注
    
     
      4.4
     
     、客户端diff、mkdir、cat
    
   
    
     diff
    
    
     :版本差异比较
    
   
svn diff 文件名 #比较本地操作过的工作副本和本地最后一次从服务器更新的副本
svn diff -r 版本号 文件名 #比较当前修改过的文件和指定的历史版本
svn diff -r 版本号1:版本号2 文件名 #比较两个历史版本中文件的差异
svn diff #扫描所有修改过的文件和本地最后一次从服务器更新的副本比较
    
     mkdir
    
    
     :创建目录并增加到版本控制
    
   
svn mkdir test.txt #创建文件test.txt文件并添加到版本控制中
    
     cat
    
    
     :不检出工作副本,直接查看指定文件(可以脱离工作副本)
    
   
svn cat svn://192.168.244.128/index #在Linux系统上,不在svn的工作副本中,查看指定文件。
    
     
      4.5
     
     、工作副本还原revert
    
   
将修改过的文件还原为与最后一次跟新副本的文件一致(在未添加到版本控制之前),修改的内容是不保存的,也就是将本次的修改不生效,还原到最后一次更新的工作副本
svn revert 文件名 #指定还原文件
svn revert * #还原当前目录下的所有文件或目录
svn revert –resursive * #递归还原当前目录下的所有文件或目录
    
     
      4.6
     
     、二进制冲突与树冲突
    
   
    
     二进制冲突:
    
    一些代码文件中具体到某个文件的具体行数
   
     
   
如果开发B在09:20进行一次更新,那就是说,服务器已经默认开发B已经知道了开发A的修改,也就不会报冲突。
     
   
    
     树冲突:
    
    发生冲突的文件都不是二进制文本文件
   
树冲突无法精确到行,并且处理树冲突必须处理整个文件,就比如两个开发人员在不同时间提交了相同图片名的不同图片。
处理冲突:
在协商之后处理完成冲突后需要告诉svn冲突已解决,
svn resolved 文件名 #告诉服务器冲突解决完毕,可以正常提交
    
     
      4.7
     
     、锁定lock与解锁unlock
    
   
锁定与解锁就是为了防止冲突的解决方案
svn lock 文件名 #锁定文件,防止其他成员对文件进行修改,如果进行提交操作之后,会将该文件自动解锁
svn commit -m “注释” –no-unlock 文件名 #对锁定的该文件提交后,依旧不解锁。
svn unlock 文件名 #解锁文件
    
     
      5
     
     、svn的进阶应用
    
   
    
     
      5.1
     
     、ls、st、log、info
    
   
svn list #列出当前目录下处于版本控制的所有文件
svn status #列出工作副本中的文件(夹)的状态
文件的状态的含义:
? #无版本控制
D #已被标记从版本库中删除
M #已被编辑过
A #已被标记增加到版本控制中
R #文件被替换
C #文件存在冲突
! #文件缺失
svn log #查看提交日志(来自svn commit -m “注释”)
svn info #工作副本及文件(夹)的详细信息
    
     
      5.2
     
     、多版本库解决方案
    
   
TCP/IP协议的标准:
TCP/IP协议规定端口号范围为0-65535号
0-1023号为公认端口
1024-49151号为注册端口
49152-65535号为私有端口
    
     
      5.1.1
     
     、不同端口启动多个版本库
    
   
在创建完版本库后,启动多个版本库需要指定监听的端口号
    
     创建版本库:
    
   
进入到svn版本库的保存目录下,创建多个版本库
[root@localhost ~]# cd /usr/local/SvnRepository/
#进入到svn版本库的保存目录下
     
   
[root@localhost SvnRepository]# svnadmin create test01 #创建版本库test01
[root@localhost SvnRepository]# svnadmin create test02 #创建版本库test02
[root@localhost SvnRepository]# svnadmin create test03 #创建版本库test03
     
   
[root@localhost SvnRepository]# ls #查看创建的版本库
     
   
    
     分别修改版本库下面的配置文件
    
   
authz:配置用户组合用户组的权限
passwd:配置用户名和用户密码
svnserve.conf:配置默认权限、权限配置文件及密码配置文件
    
     指定端口监听启动版本库:
    
   
指定端口启动运行版本库
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/test01 –listen-port 3691 #指定监听端口为3691,启动版本库test01
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/test02 –listen-port 3692 #指定监听端口为3692,启动版本库test02
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/test03 –listen-port 3693 #指定监听端口为3693,启动版本库test03
     
   
    
     [root@localhost SvnRepository]# ps -ef|grep svn       #
    
    
     查看
    
    
     svn
    
    
     的进程端口
    
   
     
   
这样,三个新添加的svn版本库都运行起来了
如果需要停止所得版本库运行,执行kill svnserve
    
     检出多个版本库
    
   
svn checkout svn://192.168.244.128:3691 /usr/local/svnwork/test013691
#检出指定端口监听的版本库到指定工作副本中
    
     
      5.1.2
     
     、一个端口启动多个版本库
    
   
多个版本库放在同一个目录下
     
   
在启动运行版本库时指定运行版本库的父级目录,这样一次就可以运行启动多个版本库
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/
     
   
检出的时候需要哪个检出哪个版本库就在IP后面加上版本库的名称
[root@localhost svnwork]# svn checkout svn://192.168.244.128/testrpo
#指定检出版本库testrpo
[root@localhost svnwork]# svn checkout svn://192.168.244.128/testrpo1
#指定检出版本库testrpo1
     
   
    
     
      5.3
     
     、svn的copy命令
    
   
功能:
    
     工作副本
    
    
     à
    
    
     工作副本
    
   
svn cp 源文件名称 目标文件名称
如果在工作副本中使用svn的copy命令复制的文件,如果复制的源文件有版本控制,则复制完成的目标文件也是有版本控制的,如果是复制的源文件是没有版本控制的,那么复制完成的目标文件也是没有版本控制的,此时需要使用svn的增加和提交命令才能有版本控制。
svn cp -r 版本号 源文件名 目标文件名
指定复制版本号的文件
    
     工作副本
    
    
     à
    
    
     版本库
    
   
svn cp 源文件名 版本库服务器地址(目标文件地址) -m “提交注释”
复制一个工作副本直接提交到版本库,不支持夸库操作
     
   
此时服务器上的版本库中有了这个新的文件,版本号会自动加1
    
     版本库
    
    
     à
    
    
     工作副本
    
   
svn cp 版本库服务器地址(源文件地址) 本地工作副本目标地址
将服务器上版本库中的文件复制到本地的工作副本中,该操作可以夸库操作
    
     版本库
    
    
     à
    
    
     版本库
    
   
    
     svn cp
    
    
     服务器上源文件地址
    
    
     服务器上目标地址 -m “
    
    
     提交注释”
    
   
不可夸库操作,本地的工作副本,直接提交的。
     
   
    
     
      5.4
     
     、主干版本与分支版本
    
   
     
   
创建分支版本的过程是完全脱离工作副本进行的,使用版本库到版本库之间的copy操作,实现主干和分支。
     
   
#复制服务器上的imooc版本库到服务器上imooc版本库中的trunk(主干)目录下,该目录下存放的就是原来的所有文件。
     
   
#在imooc版本库中复制一份主干版本(trunk)到imooc版本库中作为分支版本(branch)。
    
     
      6
     
     、svn的高级应用
    
   
    
     
      6.1
     
     、hooks钩子应用
    
   
钩子:当执行某些特定操作时触发执行预先设定好的任务。
在svn的版本库中存在文件目录hooks,里面有很多的.tmp格式的模板文件,如果需要让钩子生效,只需要将对应的文件复制一份,把.tmp这个拓展名去掉,重启svn服务,就可以启动这个钩子了,而钩子文件就是一个shell脚本,这里的执行对应任务,就是执行对应的shell脚本,可以在该脚本里面编写自己需要执行的任何脚本。这些钩子的前缀有start(数据传输开始之前),pre(数据传输之后,写入版本库之前),post(写入版本库之后),后半部分才是对应的操作名,比如commit、lock、unlock等
     
   
例:在svn中每次提交完成以后,调用钩子函数,利用Apache需要将版本库的最新信息通过网页可以直接访问。
    
     第一步:复制钩子文件
    
   
进入到svn服务器的版本库中找到hooks目录
     
   
进入hooks目录
     
   
复制一份提交完成后执行的钩子函数模板在当前hooks文件目录下,只需要将文件名的拓展名去掉。
     
   
查看钩子文件post-commit的权限,如果没有权限需要赋予执行权限
[root@localhost hooks]# ll
     
   
没有执行权限需要加上执行权限
[root@localhost hooks]# chmod +x post-commit
#添加文件的执行权限
     
   
    
     第二步、编写钩子函数脚本
    
   
使用编辑器打开该钩子脚本post-commit进行编辑
[root@localhost hooks]# vi post-commit
写入shell脚本函数
如果使自己写的shell脚本,可以去掉该钩子文件的最后几行后
     
   
编写需要执行的脚本
在每次提交完成后,每次需要将最新的版本库的详细信息保存成一个xml文件,放到Apache的目录下,用户可以通过网页浏览版本库的详细信息。
| svn info svn://192.168.244.128 –xml >> /var/www/html/repo.xml | 
     
   
编辑完成,保存退出
    
     第三步、重启svn
    
    
     服务
    
   
[root@localhost hooks]# ps -ef|grep svn #查看svn的进程
[root@localhost hooks]# kill -9 2155 #杀死进程
[root@localhost hooks]# svnserve -d -r /usr/local/SvnRepository/testrpo #启动svn服务
     
   
    
     第四步、测试
    
   
在工作副本中进行一次提交操作
     
   
配置Apache默认访问地址
[root@localhost ~]# cd /etc/httpd/conf.d/
[root@localhost conf.d]# ls
[root@localhost conf.d]# vi welcome.conf
     
   
配置完成,保存退出,重启Apache
[root@localhost conf.d]# service httpd stop #停止Apache服务
[root@localhost conf.d]# service httpd start #启动Apache服务
     
   
打开浏览器访问svn钩子生成的xml文件
    
     http://192.168.244.128/repo.xml
    
   
     
   
    
     
      6.2
     
     、版本库精简
    
   
     
   
版本库的精简也就是说把之前的老旧的一些版本号丢掉,达到精简的目的。
[root@localhost svnwork]# svn info #查看当前的最大版本号
     
   
现在需要丢弃版本1到版本3,只留版本4到版本6
首先停止svn的服务
[root@localhost svnwork]# ps -ef|grep svn
[root@localhost svnwork]# kill -9 2487
     
   
把需要保留的版本数据备份出来
[root@localhost svnwork]# svnadmin dump /usr/local/SvnRepository/testrpo -r 4:6 > ~/testrpo.repo
#将版本库/usr/local/SvnRepository/testrpo的4到6的版本备份到用户目录下的testrpo.repo
这里的版本库一定要写版本库文件系统的路径
     
   
备份成功
创建新的版本库,将备份的版本库加载进去
[root@localhost SvnRepository]# svnadmin create /usr/local/SvnRepository/newrepo
#创建新的版本库
将备份的版本库加载到新创建的版本库中
[root@localhost SvnRepository]# svnadmin load /usr/local/SvnRepository/newrepo/ < ~/testrpo.repo
#将备份的版本库~/testrpo.repo加载到新创建的版本库/usr/local/SvnRepository/newrepo/
     
   
版本库精简过后,它的版本号依然是从1开始的,它会将丢弃的版本号一次填充进来,但不填充数据。原来的版本4,现在变成了1,原来的版本号6,变为现在的版本号3.
将原来的配置文件复制到新的版本库的目录下
[root@localhost SvnRepository]# cp -av /usr/local/SvnRepository/testrpo/conf/* /usr/local/SvnRepository/newrepo/conf/
     
   
现在局可以将原来的版本库删掉了。
svn启动运行新的版本库
[root@localhost SvnRepository]# svnserve -d -r /usr/local/SvnRepository/newrepo/
     
   
在做了版本精简操作后原来的工作副本不能够正常使用,因为版本号已经对应不上了,所以需要重新检出一份才能够进行操作。
    
     
      6.3
     
     、版本库的迁移与重定向
    
   
    
     
      6.3.1
     
     、版本库的迁移
    
   
通常是服务器更换了,我们需要把数据迁移到新的服务器上。
第一种方法:
可以用版本库精简的方法,需要备份的文件充0到最新的版本号,再将备份文件复制到新的服务骑上,创建版本库后,在加载到新建的版本库。
第二种方法:
①停止svn版本库的服务
ps -ef|grep svn #查询svn的进程
kill -9 进程ID #关闭svn的服务
②把版本库压缩成.zip文件
③复制压缩文件到新的服务器上解压
④在新的服务器上启动运行解压的这个版本库
    
     
      6.3.2
     
     、版本库的重定向
    
   
     
   
     
   
迁移了数据以后,需要在工作副本中将原来的服务器地址切换成新的服务器地址(也就是版本库的重定向)
重定向的命令:
svn switch –relocat 原来的URL 新的URL
这样就能够重定向工作副本的地址
    
     
      7
     
     、svn常见的坑
    
   
    
     1
    
    
     、创建完版本库之后忘记修改svnserve.conf
    
    
     文件
    
   
svnserve.conf文件,路径为创建的版本库的目录下的conf目录下,需要在这个文件中指定每个配置文件的位置。
    
     2
    
    
     、运行版本库的路径问题
    
   
在启动运行svn服务的时候,如果没有写版本库的名称,在检出时的URL后面一定需要跟上版本库的名称,也就是说运行的时候没有写,检出的时候就必须写,运行时写了,检出时就不用写
    
     3
    
    
     、svnadmin dump/load
    
    
     管道符号的问题
    
   
备份的时候是大于号(>),加载的时候是小于号(<),如果在加载的时候写错了管道符号,数据会被覆盖,相当于备份的数据被覆盖删除了,只要写错一次备份的数据就没了。
 
