[Subversion]レポジトリ内で容量をくってるリビジョンを突き止める方法
画像ファイルなどが多数あるとかなりの容量になります。
私が管理しているあるプロジェクトは、リビジョン番号が40,000を超え、レポジトリ容量が6GBになってしまいました。
この中には不要なファイルもたくさん含まれています。
ダンプファイルに対してsvndumpfilterをかませることで、レポジトリから不要なデータを恒久的に消すことができます。
svnadmin dump /path/to/myrepo > old.dump
svndumpfilter exclude /foo/bar < old.dump > new.dump
問題は、どのファイル/コミットが無駄な容量を食っているのかです。
どのリビジョンの容量が大きいのかを調べる
レポジトリ内のdbディレクトリを直接調べたらできました。こんなコマンドです。
$ du /path/to/myrepo/db/revs/*/* | sort -nr | head -n 10
2774140 /path/to/myrepo/db/revs/0/529
979560 /path/to/myrepo/db/revs/12/12171
122600 /path/to/myrepo/db/revs/8/8236
109608 /path/to/myrepo/db/revs/0/554
104784 /path/to/myrepo/db/revs/10/10849
76400 /path/to/myrepo/db/revs/7/7936
リビジョン529のコミットが、1コミットで2GBも食っていることがわかります。:(誰だ、こんな巨大なファイルをコミットした奴わ!?
ログを見てみたら、自分のコミットでした orz
これのパス名を調べて、
svndumpfilter exclude /trunk/images/foo < old.dump > new.dump
としたら、見事この2GB分を削除できました!他にも余分なファイル・ディレクトリを除去したら、レポジトリのトータルサイズが半分に減りました。
やはりレポジトリはときどき掃除するのが大事ですね!
ちなみにGitだとどうやるんでしょうね。
参考
[Subversion]svndumpfilterで、肥大化したレポジトリをダイエットさせる方法
カテゴリ:
Subversion
sysadmin