文章目录
- 前言
- 简要步骤
- 操作示例
- 总结
前言
SVN占用的空间随着项目版本迭代越来越大,因为保存了历史记录中的各个版本,所以即使本地把废弃的目录删掉提交,也不会释放出多余的空间,大概率因为操作删除增加了一个版本号,使得占用的空间更大了。
怎么才能让它的空间变小的,最简单粗暴的方式就是丢弃历史记录,在最新的版本中剔除的废弃的目录直接上传创建一个新的仓库,这样操作后所有的人需要重新下载才行,如果想保留历史记录,就要用到今天说的这种备份、过滤、再导入的方式了。
简要步骤
假设svn库A在服务器上的路径是:/data/svndata/repos/A
,需要删除的文件路径为 /arts/tmp/pictures
,注意要过滤的文件夹路径以 /
开头,其实代指起始目录 A
。
操作的步骤如下:
//1.备份
svnadmin dump /data/svndata/repos/A > A.dump
//2.过滤掉废弃目录
cat A.dump | svndumpfilter exclude /arts/tmp/pictures > B.dump
//3.创建新的库
svnadmin create /data/svndata/repos/B
//4.导入新库
svnadmin load /data/svndata/repos/B < B.dump
//5.重命名老库
mv A A_backup
//6.重命名新库代替老库
mv B A
操作示例
操作过程使用的是一个真实的SVN仓库,就是按照上面的步骤试了一次,主要想看下是不是传说中的那么耗时,仓库名为R,数据量115G,共10843个版本。
- 导出备份文件
# svnadmin dump/data/svndata/repos/R > r.dump
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
...
完整导出用了2小时40分钟,导出文件大小为514G,数据量翻了近5倍。
- 过滤掉指定目录
# cat r.dump | svndumpfilter exclude /arts/tmp/pictures > r-exclude.dump
Excluding prefixes:
'/arts/tmp/pictures'
Revision 0 committed as 0.
Revision 1 committed as 1.
Revision 2 committed as 2.
Revision 3 committed as 3.
Revision 4 committed as 4.
...
将/arts/tmp/pictures目录过滤掉,总共用时58分钟,过滤后的备份文件大小442G
- 创建新的临时仓库
# svnadmin create r-new
- 将过滤后的备份文件导入新库
# svnadmin load ./r-new < r-exclude.dump
<<< Started new transaction, based on original revision 1
* editing path : arts ... done.
* editing path : develop ... done.
------- Committed revision 1 >>>
<<< Started new transaction, based on original revision 2
* editing path : develop/client ... done.
* editing path : develop/server ... done.
------- Committed revision 2 >>>
...
导入工作从第一个版本依次应用,总共用时4小时。
这个过程真的是很慢,完整用时近8小时,并且对磁盘空间要求很大,另外还有个接近1万个版本号大小为800G的库,在24核机器上仅导出就花了41小时,备份文件大小4.5T,后面我就没试了,磁盘快满了。
总结
- 备份
svnadmin dump /data/svndata/repos/A > A.dump
- 过滤
cat A.dump | svndumpfilter exclude /arts/tmp/pictures > B.dump
- 建新
svnadmin create /data/svndata/repos/B
- 导入
svnadmin load /data/svndata/repos/B < B.dump
朝气蓬勃的孩子真的可爱,可是我还是想长大,这样才有机会掌控节奏,虽然现在看起来像个提线木偶,但正在尝试突破束缚~