web-dev-qa-db-ja.com

事後、gitリポジトリからバイナリデータをプルーニングする

誤っていくつかの大きなバイナリデータをいくつかのコミットにコミットしました。それ以来、.gitignoreを更新しましたが、これらのファイルはコミットされていません。しかし、以前のコミットに戻って、このデータをリポジトリから選択的にプルーニングし、.gitignoreにあるはずのいくつかのディレクトリを削除したいと思います。コミット自体を削除したくありません。

これを達成するにはどうすればよいですか?私の優先する方法は、古いコミットに.gitignoreルールを遡及的に適用する何らかの方法です...この方法を使用する回答は、問題が一意ではないと確信しているため、他の人にとってもかなり一般的に役立ちます。また、各ユーザーの一意のディレクトリ構造に固有の多くのカスタマイズを行わなくても、一般的なソリューションにすばやく適用できます。

これは、私が上で提案した簡単な方法、またはより複雑な方法で可能ですか?

33
Myrddin Emrys

この答え の解決策は私にとって完璧に機能しました:

この回答 のように、 bfg repoクリーナーのようなツール を使用してクリーンプロセスをテストすることもできます。

Java -jar bfg.jar --delete-files *.{jpg,png,mp4,m4v,ogv,webm} ${bare-repo-dir};

(BFGは、最新のコミットでは何も削除しないことを確認するため、現在のインデックスからそれらのファイルを削除し、「クリーン」コミットを行う必要があります。他のすべての以前のコミットはBFGによってクリーンアップされます)

12
Ed.