Q: git管理で不要なファイルを削除できないか?

過去のコミット履歴は残した状態で不要なファイル(中間情報や実行ファイル)を削除しサイズを小さくしたいのですが、実施する方法はありますか?

A: BFG Repo-Cleaner または git filter-branch を用いると履歴から特定のファイルを除去することができます

ここでは BFG Repo-Cleaner を使って対象の Git リポジトリの履歴から *.obj *.exe *.dll を除去する手順を説明します。もっと細かな変更は git filter-branch を使えば実施することができます。そちらについては Git のドキュメントをご確認ください。

① BFG Repo-Cleaner の準備

  1. Java 7 以降をインストール
  2. bfg-1.14.0.jar をダウンロード
  3. 以下のコマンドで usage が表示できることを確認

$ java -jar /path/to/bfg-1.14.0.jar
bfg 1.14.0
Usage: bfg [options] [<repo>]
....

② 対象の Git リポジトリのミラーをローカルに作成

また clone が終わったらディスク使用量を du -sh などで計測しておきます。

$ git clone --mirror https://<your-site>.tracpath.com/git/<reponame> /tmp/new-repos.git
$ du -sh /tmp/new-repos.git

③ 履歴から指定のファイルを削除

bfg --delete-files "*.{obj,exe,dll}" コマンドで *.obj *.exe *.dll ファイルを履歴から削除します。

履歴の変更が終わったら git gc を行い不要なファイルを整理します。終わったところでディスク使用量を du -sh などで計測します。

まだ不要なファイルがある場合は bfg を繰り返し実行します。また、誤って必要なファイルを削除していないかなども確認します。

$ cd /tmp/new-repos.git
$ java -jar /path/to/bfg-1.14.0.jar --delete-files "*.{obj,exe,dll}"
$ git reflog expire --expire=now --all
$ git gc --prune=now --aggressive
$ du -sh /tmp/new-repos.git

④ 変更したリポジトリをインポート

変更が済んだリポジトリを git fast-export を用いてダンプを行い、それを tracpath にインポートします。

$ cd /tmp/new-repos.git
$ git fast-export --all | gzip -9 >/tmp/new-repos-export.gz

関連FAQ


リンク

TipsAndHowto/git管理で不要なファイルを削除できないか? (last edited 2021-07-21 06:28:22 by omae)