目录
4.2、checkout与export的区别于使用... 33
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] |
保存退出
查看添加配置后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 |
在创建的这个版本库下会自动创建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 |
指定根目录配置用户组权限:
pm组具有读写权限(rw),dev组只有读权限(r),rookie组只有读权限(r),
此处的读(r)表示:在客户端可以跟新服务器上的代码到本地
此处的写(w)表示:在客户端可以提交代码到服务器
[/] |
指定版本库配置权限:
配置testrpo版本库权限为pm组可读写(rw),用户zxr1可读写(rw),用户zxr2只能读(r),用户zxr3无权限
[testrpo:/] |
指定版本库下的某个目录或文件权限配置:
配置testrpo版本库下的test01目录的权限为所有人可读写(rw)
[testrpo:/test01] |
全部配置如图
配置完成保存退出。
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 管道符号的问题
备份的时候是大于号(>),加载的时候是小于号(<),如果在加载的时候写错了管道符号,数据会被覆盖,相当于备份的数据被覆盖删除了,只要写错一次备份的数据就没了。
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true"> <use xlink:href="#csdnc-thumbsup"></use> </svg><span class="name">点赞</span> <span class="count">2</span> </a></li> <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-csdnc-Collection-G"></use> </svg><span class="name">收藏</span></a></li> <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-csdnc-fenxiang"></use> </svg>分享</a></li> <!--打赏开始--> <!--打赏结束--> <li class="tool-item tool-more"> <a> <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg> </a> <ul class="more-box"> <li class="item"><a class="article-report">文章举报</a></li> </ul> </li> </ul> </div> </div> <div class="person-messagebox"> <div class="left-message"><a href="https://blog.csdn.net/qq_36938617"> <img src="https://profile.csdnimg.cn/C/2/A/3_qq_36938617" class="avatar_pic" username="qq_36938617"> <img src="https://g.csdnimg.cn/static/user-reg-year/1x/3.png" class="user-years"> </a></div> <div class="middle-message"> <div class="title"><span class="tit"><a href="https://blog.csdn.net/qq_36938617" data-report-click="{"mod":"popu_379"}" target="_blank">Aaron_Run</a></span> </div> <div class="text"><span>发布了45 篇原创文章</span> · <span>获赞 48</span> · <span>访问量 2万+</span></div> </div> <div class="right-message"> <a href="https://im.csdn.net/im/main.html?userName=qq_36938617" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信 </a> <a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a> </div> </div> </div>