1. ホーム
  2. git

[解決済み] git filter-branchのファイルを大量に削除する。

2022-03-04 22:19:42

質問

リポジトリをsvnからgitに移行しています。

この最後のステップでは、履歴から不要なファイルを大量に削除したいと思います。

以下のコマンドを試しています。

git filter-branch --prune-empty --index-filter \
  "for file in $(cat files); do git rm -rf --cached --ignore-unmatch ${file}; done" -f

しかし、引数リストが長すぎるとのことです。

のように書き換えることができるんだ。

for file in $(cat files); do
  git filter-branch --prune-empty --index-filter \
    "git rm -rf --cached --ignore-unmatch ${file}" -f
done

しかし、filter-branchを何度も実行することになるし、履歴も長くなるので、時間がかかりすぎる。

たくさんのファイルを削除して、より速くfilter-branchする方法はないのでしょうか?

解決方法は?

を使うことをお勧めします。 BFG に代わる、よりシンプルで高速な git-filter-branch 特に、Git の履歴から不要なファイルを削除するために設計されています。

に記載されていますね。 コメント 問題ファイルは一般に大きなバイナリであり、BFGはこれを処理するための特別なオプションを持っていること - あなたは慎重にBFGの 使用方法 ということですが、核心部分はこれだけです。

$ java -jar bfg.jar  --strip-blobs-bigger-than 10M  my-repo.git

10MBを超えるサイズのファイル(あなたの 最新の コミット) は、Git リポジトリの履歴から削除されます。このとき git gc を実行して、死んだデータを一掃します。

$ git gc --prune=now --aggressive

BFGは通常、少なくとも 10-720x よりも速い git-filter-branch そして、一般的に使いやすくなっています。

全文公開:私はBFGレポクリーナーの作者です。