巨大なファイル郡をaddしてしまったとき
サブディレクトリに数百MB単位のバイナリファイル郡があるディレクトリで,バイナリファイルについては.gitignoreに指定することでバージョン管理対象外としてリポジトリの肥大化を防いでいたという状況で,なんとはなしにディレクトリ構成を変更して,いつものように
$ git add -A .
などとしたところ,コミット対象にバイナリファイル郡が大量に追加されてしまったので慌てて
$ git reset --mixed
とした。
このときはこの対処で問題は回避されたと思い,しばらくリポジトリを運用していたのだけど,この前
$ df -h
を実行したら当該ディレクトリの合計ファイル容量が予想のおよそ倍になっていることに気が付いた。
当該ディレクトリ以下で大量に容量を消費しているファイルを調べてみたところ,.git/objects以下のファイルが数GBの容量を消費していることが判明。
先に結論を言うと,かつてaddしてしまったバイナリファイル群がgitのオブジェクトとして生き続けていて,これだけのストレージを消費していたのだった。
というわけで,
$ git fsck
を実行して,いくつかのblobオブジェクトがdangling状態(既存のコミットから辿ることのできないオブジェクト)となっていることを確認。
他のユーザーがリポジトリの編集をしていないことを確認した上で(まあ,今回のケースでは一人用リポジトリだから確認する必要もないのだけども)下記のコマンドを実行。
$ git prune
改めてdfコマンドを実行すると,ほぼ予想通りの容量となっていたので,めでたしめでたし,でした。