私の現在のベースの合計サイズは約です。200MB。
しかし、私の.gitフォルダーのサイズは5GB(!)と驚くべきものです。作業を外部サーバーにプッシュするので、ローカルの大きな履歴は必要ありません...
ノートブックの空き容量を増やすために.gitフォルダを縮小するにはどうすればよいですか?30日より古いすべての変更を削除できますか?
助けてくれてありがとう:)
私の現在のベースの合計サイズは約です。200MB。
しかし、私の.gitフォルダーのサイズは5GB(!)と驚くべきものです。作業を外部サーバーにプッシュするので、ローカルの大きな履歴は必要ありません...
ノートブックの空き容量を増やすために.gitフォルダを縮小するにはどうすればよいですか?30日より古いすべての変更を削除できますか?
助けてくれてありがとう:)
回答:
30日以上経過したすべての変更を削除しないでください(gitを悪用する可能性はあると思いますが、実際にはお勧めしません)。
を呼び出すとgit gc --aggressive --prune
、リポジトリでガベージコレクションが実行され、古いオブジェクトが削除されます。頻繁に変更される多くのバイナリファイル(アーカイブ、画像、実行可能ファイル)がありますか?これらは通常、巨大な.gitフォルダーにつながります(gitは各リビジョンのスナップショットを保存し、バイナリファイルは不適切に圧縮されます)
git gc --aggressive
は、悪い習慣と見なされます。使用することをお勧めしますgit repack -a -d --depth=250 --window=250
。
git gc --aggressive
250のウィンドウサイズ(マンページを参照)および250の深さ(ソースコードを参照)でrepackを呼び出します。--aggressiveは-f
スイッチを追加して、以前のすべてのデルタ操作を破棄してやり直します(リンクにも記載されています)
git gc --aggressive --prune
すると、19MBに減少しました。
--prune
以来デフォルトになっているため、これも必要ありません。v1.5.5-rc0
git Linusの作成者がgitリポジトリを縮小する方法について次のように語っています。
「git gc --aggressive」に相当-ただし、*適切に*-は、次のようなことを(一晩)実行することです。
git repack -a -d --depth=250 --window=250
ここでの深さは、デルタチェーンの深さ(古い履歴の場合は長くする-スペースのオーバーヘッドに値します)であり、ウィンドウは、各デルタ候補にスキャンさせるオブジェクトウィンドウの大きさです。
ここで、「-f」フラグを追加することをお勧めします(これは、「古いデルタをすべて削除する」です。これは、実際に適切な候補を見つけることを確認しようとしているためです。
ソース:http : //gcc.gnu.org/ml/gcc/2007-12/msg00165.html
これにより、私のリポジトリで孤立したバイナリデータが削除されますか?"git repack"は、リポジトリにチェックインして削除した画像やバイナリデータをgitで取り除きません。これらの種類のデータをリポジトリから完全に削除するには、履歴を書き直す必要があります。その一般的な例は、誤ってgitでパスワードをチェックインした場合です。戻っていくつかのファイルを削除することはできますが、その場合は、履歴を今までに書き直してから、強制的にプッシュしてから、新しいリポジトリを元に戻す必要があります。
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
ローカルで実行した後、コミットとプッシュを実行すると、縮小もリモートになりますか?
私はこれらを試しましたが、私のリポジトリはまだ非常に大きかったです。問題は、生成された大きなファイルを誤ってチェックインしてしまったことです。いくつか検索したところ、生成された大きなファイルを簡単に削除できる優れたチュートリアルが見つかりました。このチュートリアルでは、リポジトリを60 MBから1 MB未満に縮小できました。
バージョン履歴よりも同期メカニズムとしてgitを使用しています。したがって、この問題に対する私の解決策は、現在のすべてのソースが適切な状態であることを確認し、.gitを削除してリポジトリを再初期化することです。ディスク容量の問題が解決しました。:-)履歴が消えました:-(これは、リポジトリが小さなUSBキー上にあるためです。履歴全体を使いたくない、または必要としません。履歴を切り捨てるだけの方法があれば、それを使用します。
私の履歴を保存することに興味がある場合は、現在のリポジトリをアーカイブします。後で、元のリポジトリのクローンを作成し、新しいリポジトリからすべての変更をコピーすることができます(名前の変更や削除をほとんど行っていないとしましょう)。次に、新しいリポジトリで行われたすべての変更を表す1つの大きなコミットを、古いリポジトリでの単一のコミットとして作成します。履歴をマージすることは可能ですか?多分私がブランチを使用して、それから不要なオブジェクトを削除した場合。(私はgitの内部について十分に知らないので、そのように浮気を始めます)。
上記の方法を試したところ、私の場合(git push中に誤ってgitプロセスを強制終了した場合)は何も機能しなかったため、最終的にリポジトリを削除して再度複製する必要があり、.gitフォルダーは通常のサイズになりました。
git count-objects -v
か?