[Subversion]レポジトリ内で容量をくってるリビジョンを突き止める方法

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で、肥大化したレポジトリをダイエットさせる方法
カテゴリ: