約 2030 コミットのレポがあります。コミット 2000 年頃に、ファイルが変更されたため、サイズが約 20M から 1.2 GB に誤って移動しました。履歴を書き換えてこのファイルを削除することはできますが、コミット 2000 からのみ可能ですか? (このファイルの以前の履歴を失いたくない)
私はgit-filter-branchを考えていましたが、「コミットから」と伝える方法がわかりませんでした-可能ですか?
乾杯マイク
約 2030 コミットのレポがあります。コミット 2000 年頃に、ファイルが変更されたため、サイズが約 20M から 1.2 GB に誤って移動しました。履歴を書き換えてこのファイルを削除することはできますが、コミット 2000 からのみ可能ですか? (このファイルの以前の履歴を失いたくない)
私はgit-filter-branchを考えていましたが、「コミットから」と伝える方法がわかりませんでした-可能ですか?
乾杯マイク
git-filter-branchのマニュアルページには、このための決定的で信頼できる例が含まれています。
特定のコミットの前に書き換えを停止したい場合は、前に言ってtag01
ください:
git-filter-branch ...... -- master ^tag01
ドットの代わりに、すでに持っているものを使用してください。tag01は、代わりに任意のコミットっぽいものにすることができます(revspec)
--tag-name-filter cat
PS:タグを使用する場合は、これらも書き直すことを忘れないでください
なぜあなたはしないのですか
new
を作成します。ここでは、このファイルを 1.2 GB ファイルに変更しません。master
、new
マージ オプション付き-Xtheirs
BFG Repo-Cleanerを試してみてください。これはgit-filter-branch
、Git リポジトリから大きなファイルやプライベート データを削除するために設計された、より高速でシンプルな代替手段です。
実行可能な jar ファイル(Java 6 以降が必要) をダウンロードして、次のコマンドを実行します。
$ java -jar bfg.jar --strip-blobs-bigger-than 100MB my-repo.git
サイズが 100MB を超えるもの (最新のコミットのファイル階層にないもの) は、リポジトリの履歴から完全に削除されます。質問で指定されているように、100MB より小さいファイルのすべてのバージョンはそのまま残されます。
完全な開示: 私は BFG Repo-Cleaner の作成者です。