tmyam's blog

time run off...

SVN仓库备份和迁移

前言

本文主要是讲如何将多个不同地址的SVN仓库进行备份,和根据需要进行合并。

仓库备份

  • svnadmin dump

1、备份方式多样
2、如果版本数过多,dump的过程将非常慢
3、备份耗时,恢复更耗时
4、备份时数据变大,恢复后数据可能会变小
5、库下的passwdauthz不会备份

  • 全备份

在需要备份SVN仓库的服务器上,

1
2
3
4
5
# 压缩备份
sudo svnadmin dump /path/repository | sudo gzip > /path/repository-backup.gz.2017-03-28

# 不压缩备份
sudo svnadmin dump /path/repository > /path/repository-backup.2017-03-28
  • 只备份指定的子目录

1、导出整个库的内容

1
svnadmin dump /path/repository > /path/repository-backup.2017-03-28

2、从备份文件中过滤出要导出的目录(可以过滤多个目录)

1
cat /path/repository-backup.2017-03-28 | svndumpfilter  include /projects > /path/projects-backup.2017-03-28

3、选择是否压缩

1
gzip /path/projects-backup.2017-03-28

注意: projects目录必须是没有rename的目录,如果是rename后的目录,则导出的文件都是空记录,使用rename前的目录名导出的备份还是rename前的。
为了正确导出rename后的文件,假如rename前的目录名为apple,步骤2改为include /projects /apple,这样就可以导出rename后的文件了。

仓库迁移

  • 使用FTP等工具,将备份的文件传输到目的服务器上,例如 /home目录下

仓库合并

  • 在目的服务器上创建一个主仓库 /path/main_repository
  • 在本地checkout目的服务器的主仓库

  • 如果需要将迁移的仓库存储到SVN中指定的目录 A 下,则在本地创建这个指定的目录 A,并用svn工具提交到目的服务器。然后登录目的服务器:

1
2
3
4
5
# 解压缩合并
sudo zcat /home/repository-backup.gz.2017-03-28 | sudo svnadmin load /path/main_repository --parent-dir A

# 不解压缩合并
sudo svnadmin load /path/main_repository --parent-dir A  < /home/repository-backup.2017-03-28

参数 --parent-dir 是指定版本库main_repository下的具体路径,这里是第一级目录A.

  • 如果不用迁移到指定目录下,只需要迁移到根目录下,则登录目的服务器:
1
2
3
4
5
# 解压缩合并
sudo zcat /home/repository-backup.gz.2017-03-28 | sudo svnadmin load /path/main_repository

# 不解压缩合并
sudo svnadmin load /path/main_repository < /home/repository-backup.2017-03-28

这样就可以将多个仓库合并成一个仓库了。

仓库恢复

  • 如果仓库遇到不可修复的问题或者内容够乱,需要恢复到以前备份的仓库。
  • 使用FTP等工具,将备份的文件传输到需要恢复的服务器上,例如 /home目录下
  • 登录需要恢复的服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 建立新的svn仓库
sudo svnadmin create /path/new_repository

# check
ls -l /path/new_repository

# 赋予组成员对所有新加入文件仓库的文件拥有相应的权限
sudo chmod -R g+rws /path/new_repository

# 导入没压缩数据
sudo svnadmin load /path/new_repository < /home/repository-backup.2017-03-28

# 导入被压缩数据
sudo zcat /home/repository-backup.gz.2017-03-28 | sudo svnadmin load /path/new_repository

# 删除旧仓库
sudo rm -r /path/main_repository

# 修改新仓库名
sudo mv /path/new_repository /path/main_repository

# 修改权限
sudo chown -R www-data:subversion /path/main_repository

如果是清空svn仓库,则只要去掉导入的步骤就可以了。


参考

http://www.jianshu.com/p/295b423d50ad
http://blog.chinaunix.net/uid-10449864-id-3048714.html
http://blog.chinaunix.net/uid-725717-id-3147440.html

评论