4

そのため、現在、非常に複雑な問題と思われる問題があり、バイナリ ファイルを CDN / ドロップボックスなどに移動する機能を使用せずに修正する方法について助けが必要です。この問題を評価するときは、画像 / PDF などを削除して配置することに注意してください。残念ながら、ドロップボックスまたはその他の外部ストレージに保存することはできません。

したがって、現在の問題は、数百のリポジトリがあり、それぞれに数千のコミットがあり、各リポジトリには一般に 3 つのブランチがあることです。私のテスト リポジトリの 1 つで、リポジトリの du -sh を実行すると、サイズは約 13 GB になります。作業ディレクトリのサイズは約 800 MB です。したがって、これまでにサイズを縮小するために試みたのは次のとおりです。

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch path/to/largest/files.pdf" HEAD
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune
git gc --prune=now --aggressive
git repack -a -d --depth=250 --window=250

du -sh のリポジトリ ディレクトリの上のすべてのテストの後、サイズは 13GB のままです。したがって、私の次の考えは、すべてのバイナリ ファイル履歴 (jpg / pdf / png など) を削除し、バイナリ ファイルの最新リビジョンのみを保持することです。ただし、それを達成する方法がわかりません。 for i in ;を実行できます。find -name "*.pdf"do git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $i" HEAD done たとえば、それがおそらく最善の方法であるかどうかはわかりませんさまざまな種類のアセットをすべて完了するには、永遠に時間がかかります。

ここでの主な目的は、履歴にバイナリ ファイルのリビジョンを 1 つだけ保持することでサイズを縮小することです。これにより、パック ファイルのサイズが小さくなり、以前に履歴で削除されたすべてのバイナリも削除できます。これは 100% 問題ありませんが、自動化された方法でそれを行う方法がわからない。

どんな助けでも大歓迎です。

4

2 に答える 2

2

git filter-branch3 つのブランチがあるので、最初のコマンドですべてのブランチを処理するように指定しないのはなぜですか?

git filter-branch --index-filter \
"git rm -rf --cached --ignore-unmatch path/to/largest/files.pdf" -- --all

次に、への参照を削除するrefs/originalには、次のコマンドを提案します。

git for-each-ref --format="%(refname)" refs/original/ | \
xargs -n 1 git update-ref -d
于 2013-07-18T09:15:44.773 に答える
0

これらのコマンドを使用して、ある程度成功しました。

git filter-branch \
  --index-filter "git rm --cached --ignore-unmatch '$1'" \
  --prune-empty --tag-name-filter cat -- --all || exit

# Cleanup and reclaming space
rm -r .git/refs/original
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

参照

于 2013-01-11T18:36:38.003 に答える