これは、古い jar ファイルをすべて削除する手順です。
$ java -jar bfg-1.12.3.jar --strip-biggest-blobs 500 some-big-repo
...BFG の作成者として、--strip-biggest-blobs 500
私は思ったほど明確ではなかったことに気がつきませんでした。このコマンドは、最大 500 個のファイル (大きなファイル、またはバイナリ ラージ オブジェクト: 'blob') をリポジトリ履歴から削除します。ユーザーがそのステップで何をすると思ったのか知りたいです!
これは、正しく削除されたコマンドですDiff.java
:
$ java -jar bfg-1.12.3.jar --delete-files Diff.java some-big-repo
BFGの説明では、BFGを実行する前にリポジトリの「バックアップを作成する必要があります」と書かれていますが、ここではそうではないようです。
次の 2 つの条件を考慮すれば、古いブランチとタグを復元できる可能性があります。
- 生のオブジェクト データがまだ利用可能なリポジトリ。それら
git gc
はリポジトリですぐに実行されないため、それはローカル コピーであり、場合によっては GitHubでもあります。オブジェクトはまだ存在している可能性があり、使用する場合は古いプル リクエストによって参照されることさえあります。あなたの GitHub リポジトリのミラー クローンをすぐに作成します。
- 古い 'ref' 値 (元のブランチとタグのコミット ID) も必要です。ローカル コピーのreflog、または CI サーバーのログでそれらを見つけることができる場合があります。BFG は変更された参照の古い値と新しい値をコマンド ラインに出力しますが、まだその出力が得られていないと思います。BFG は現在その出力を保存しませんが、実行するたび
object-id-map.old-new.txt
にディレクトリの下にファイルを保存し、変更されたコミットごとに古い ID と新しい ID を含みます。some-big-repo.bfg-report
BFG が複数回実行されたため、これらのファイルは複数存在します。これらのファイルを使用して現在の参照を調べると、2 つの BFG 実行を遡って、参照の元のコミット ID が何であったかを確認できるはずです。
これらのことを考えると、回復プロセスは次のようになります。
--mirror
古いオブジェクトがまだ含まれている可能性が最も高いリポジトリのクローンを作成します。
- 本当にそれらのオブジェクトがあるかどうかをテストします。
master
したがって、 の古い ID が であったことを立証できると仮定すると686b0cd80ac328e060b80dda3c9dadb1e400134a
、 を実行しますgit cat-file -p 686b0cd80ac328e060b80dda3c9dadb1e400134a
。オブジェクトがまだ存在する場合は、コミットの概要が表示されます。そうでない場合は、他の候補リポジトリのリモートを追加し、そこからデータを取得してみてください
- git update-ref
master
を使用して、ブランチを元のコミットの値に設定します。git update-ref refs/heads/master 686b0cd80ac328e060b80dda3c9dadb1e400134a
関心のある他のすべてのブランチとタグについて繰り返します。これをスクリプト化できることを願っています。頑張ってください!