开发中常用到的一个版本控制软件就是SVN. 有时候, 需要对版本控制器的内容进行备份/还原或者迁移. 尽管用得比较少, 但是一旦用到, 该掌握的知识还是要掌握的.
环境: CentOS 6.6
svn的备份还原有三种方式, 这里重点介绍前两种:
下面对常用的方法进行介绍:
1. dump方法的介绍
假如, 版本库的路径是/var/svn/lius, 我们先备份.
备份:
# svnadmin dump /var/svn/lius > ~/svn.dump
还原: 需要先建立一个版本库, 再进行还原 (可以是不同的名称):
# svnadmin create /var/svn/liemer
# svnadmin load /var/svn/liemer < ~/svn.dump
<<< 开始新的事务,基于原始版本 1
* 正在增加路径: TestFile.txt ...完成。
------- 提交后版本 1 >>>
<<< 开始新的事务,基于原始版本 2
* 正在增加路径: 1.jpg ...完成。
* 正在增加路径: 2.jpg ...完成。
* 正在增加路径: 3.jpg ...完成。
* 正在增加路径: 4.jpg ...完成。
------- 提交后版本 2 >>>
将原来的配置文件信息, 复制到新的版本库的conf目录, 原来的可以备份到别处:
# pwd
/var/svn/liemerlius/conf
# ls
authz passwd svnserve.conf
# mkdir ../bak && mv * ../bak // 先备份原来的配置文件
# cp /var/svn/lius/conf/* /var/svn/liemerlius/conf/ // 将原来的配置文件复制到这里, 重启svn服务
# ls
authz bak passwd svnserve.conf
# killall svnserve
# svnserve -d -r /var/svn
windows上, 可以用TortoiseSVN测试一下, 本人测试是可以的.
2. dump增量备份方法的介绍
当然, 如果版本库的内容已经够多了, 一次性完全备份是不现实的. 我们可以定期进行增量备份, 节省很多的时间. 将来恢复的时候, 将各个分文件按顺序恢复即可.
首先, 应该知道版本库的已有版本, 在windows上, 按照下列方法进行:
这里的Revision就是版本号的信息.
增量备份和还原:
# svnadmin dump /var/svn/liemer -r 1:2 --incremental > ~/inc.bak // 增量模式备份, 冒号前后是开始和结束的版本号
* 已转存版本 1。
* 已转存版本 2。
# svnadmin create /var/svn/liemerlius // 可以创建, 也可以在一个已有的版本库里面进行还原.
# svnadmin load /var/svn/liemerlius < ~/inc.bak
<<< 开始新的事务,基于原始版本 1
* 正在增加路径: TestFile.txt ...完成。
------- 提交后版本 1 >>>
<<< 开始新的事务,基于原始版本 2
* 正在增加路径: 1.jpg ...完成。
* 正在增加路径: 2.jpg ...完成。
* 正在增加路径: 3.jpg ...完成。
* 正在增加路径: 4.jpg ...完成。
------- 提交后版本 2 >>>
同样的, 还原后可以在windows上进行验证.
3. hotcopy进行热备份和还原
备份的方法:
# svnadmin hotcopy /var/svn/lius/ ~/hotcopy.bak // 后面是要备份的路径, 是一个目录
# file ~/hotcopy.bak
/root/hotcopy.bak: directory
# ls ~/hotcopy.bak
conf db format hooks locks README.txt
–clean-logs选项,是svnadmin执行热拷贝操作时,删除不用的Berkeley DB日志文件。 可以在任何时候运行这个命令得到一个版本库的安全拷贝,不管其它进程是否使用这个版本库。
还原:
# svnadmin hotcopy ~/hotcopy.bak /var/svn/hotsvn
# ls /var/svn/hotsvn
conf db format hooks locks README.txt
# killall svnserve
# svnserve -d -r /var/svn/
同样, 可以可以验证一下是否可用, 在windows建立新文件夹, 登录账号进行同步, 发现是可以的.