2

私は(開始時に)サイズが5.6Gであったレポを持っています:

aparkin@mymachine ~/repo (master)
$ du -d 0 -h
5.6G    .

ただし、このリポジトリには、リポジトリに含める必要がなくなった多数の大きなバイナリファイルが含まれていました。元々、それらはディレクトリ構造のさまざまな場所にありましたが、すべて「tc.dat」という名前でした。「クリーンアップ」ステップとして、cruftディレクトリを作成しgit mv、それらすべてをこのcruftディレクトリに入れて、名前をtc.dat1tc.dat2などに変更しました。

次に、これらのファイルを5つ作成tc.dat1しました。tc.dat5

次に、この質問filter-branchに従い、クリーンアップ手順と一緒に使用して、cruftディレクトリ内のこれらのファイルのすべてのインスタンスを削除しました。ただし、これにより、(に移動する前のcruft)元のファイル名がリポジトリに残ります。次に、すべてのコミットにわたって元の場所からそれらを削除する手順を繰り返し、再度クリーンアップ手順を実行しました。

rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune 

結局のところ、私が

git log --all -- tc*.dat

履歴に一致するものはありません。これは、完全に削除されたことを示しています。ただし、もう一度行うとdu、リポジトリのサイズは5.6Gのままです。これらのファイルが約0.5GBで構成されていることを考えると、その数は減少すると予想されます。

私は何が欠けていますか?

4

1 に答える 1

3

わかりました、私が見逃していたことがいくつかありました。

Gitプルエラーのヒントに従ってください:一時的なsha1ファイル名を作成できません私はいくつかのコマンドを試しました:

$ git-prune
$ git-prune-packed
$ du -h -d 0
5.2G

これは約0.4Gダウンで、これは私が削除したいファイルのサイズとほぼ同じです。また、他のいくつかの質問とmanページを読んで、とgit-refloggit-gc使用法が間違っていることに気づきました。どちらも、履歴のどこまで遡るかについて議論します。どちらの場合も、すべての履歴が必要なので、パラメーターが必要です。reflog expire--aggressive --prunenow

$ rm -rf .git/refs/original/
$ git reflog expire --all --expire=now
$ git gc --aggressive --prune=now
$ du -h -d 0
4.5G    .

私が始めたものよりもかなり大幅な節約(1.1G)。

于 2012-08-17T18:49:34.430 に答える