申し訳ありませんがfilter-branch
、これを行う唯一の方法です。
緊張している場合は、リポジトリの別のクローンでテストしてみてください。これを行うと、git がすべてをバックアップすることを覚えておいてください。そのため、変更された履歴をプッシュするまで、複製されたリポジトリのサイズがローカルで増加します。
この に関する GitHub の便利なページをチェックしてみます。
また、私の恥知らずなプラグインをお許しいただければ、私は最近、履歴と作業コピーの両方で大きなファイルに関するいくつかの基本的なメトリックを提供するRuby gemに取り組んでいます。これはまだ活発に開発されていますが、うまく機能し、役に立つことを願っています。
編集:あなたのアプローチがうまくいかない理由
まず、git は分散型のリビジョン管理システムです。つまり、clone
. したがって、git checkout <commit-sha>
リポジトリの履歴内の任意のコミットに対して for を実行して、過去のある時点でのリポジトリがどのようなものであったかを正確に取得できます。
新しいブランチを作成しても、リポジトリの履歴から解放されるわけではありません。実際、ブランチは commits へのポインターにすぎません。簡単にするために、すべてのブランチには共通の祖先があるため、new-master
ブランチは古いブランチとまったく同じmaster
です。サイズのわずかな減少は、おそらく git がガベージ コレクションから最適化をわずかに改善したことによるものでしょう。
あなたが実行したときgit gc --prune=now
、あなたはloose objects
あなたのpackfile
. Apackfile
は、効率を高めてリポジトリのサイズを縮小するために、git が効率的にオブジェクトを格納する場所です。詳細については、こちらをご覧ください。
あなたが git の新参者である場合、参加することはたくさんありますが、私は高レベルの概要を提供しようとしました. 優れた git ドキュメントを調べて、そのgit filter-branch
コマンドを無効にして、リポジトリのサイズを縮小することに真の意味で影響を与える準備をします。