2011-07-17 14 views
3

gitリポジトリに特定のバイナリファイルがあります。通常、サイズは約2MBです。gitリポジトリ内のバイナリブロブをクリーンアップ

私たちの開発者の一人は、間違いなくこのファイルをすべての依存関係にバンドルしており、ファイルを約40MBにまで上げました。

もちろん、私たちは固定バージョンをコミットしましたが、メインリポジトリには不要なバイナリデータ40MBの無駄なチャンクが残っています。私は、その特定のコミット(またはそれに関する他のコミット - それはコンパイルされたバイナリですが、ソースはバージョン管理されています)のためにそのファイルの履歴を必要としないことを保証できます。

レポサイズを復元するには、どのようにデータのBLOBを削除できますか?単純なgit gcで十分ではありません。私はよく分からない低レベルのハッキングが必要だと思います。

+0

はい。明らかに私たちが気にすることのできないディスクスペースはそれほどありません。しかし、このレポはリモートサーバーに展開する必要があります。その40MBのオーバーヘッドを持つことはできません。 –

+0

@Yuval、あなたは常にレポ全体を展開していますか?どうして?現在のバージョンだけを配備するか、変更を展開するために 'git pull'を使用すると(これは40MB *を一度*転送することを意味します)、それは良いことではないでしょうか? – svick

+0

それでも、これは知っておくと便利です。宗教的に行われた場合、レポの全体的なサイズを抑えます。ここに40MB、そこに40MBは、簡単に数GBに追加されます。 – Arafangion

答えて

5

ソースコードからファイルを作成できる場合は、リポジトリに属していない可能性が非常に高いです。

リポジトリからそのファイルのバージョンを削除する場合は、git rebase -iを使用するのが理想的です。問題は、それが書き直し履歴であり、すでに公開されている(つまり、複数のユーザー間で共有されている)コミットのためのものではないということです。本当にしたい場合は、この作業を行う方法についてはRecovering from upstream rebaseを参照してください。

このリベースを実行すると、ファイルはしばらくリポジトリに残りますが、最終的に自動的に削除されます。 git cloneまたはgit pullを使用すると、まったく送信されません。

+0

他の答え(そのコメント付き)は、これが歴史の書き換えを必要とすることはかなり不明であると思います。最初にそのバージョンのファイルをコミットしたことがないようにする必要があります。 (私はここにファイルをコミットする必要があるかどうかを判断しています。) – Cascabel

0

あなたがチェックアウトした場合、ファイルはレポのローカルコピーに届きます。 git rmを使ってそれを取り出してください。 Completely remove file from all Git repository commit history

+0

いいえ、このファイルはリポジトリから削除できません –

+0

Yuval:リポジトリから削除するか、削除しないかを選択します。選択してください! – Arafangion

+0

(ちなみに、代わりに前のコピーをチェックアウトすることができます) – Arafangion

関連する問題