このリポジトリには、数ヶ月前にコミットから削除した大容量ファイルの大きなサブディレクトリがあり、リポジトリから永久に削除したいと思います。 huge サブディレクトリはダウンロードにはありませんが、オブジェクト ディレクトリは非常に大きいです。
チェックアウト/複製には時間がかかります。これは、.git/objectsディレクトリが大きいためだと思います。
repo
<files to keep>
<massive subdirectory>
複数のサブディレクトリを削除したいと思います。
https://stackoverflow.com/questions/10067848/remove-folder-and-its-contents-from-git-githubs-history
上記のリンクには、このスクリプトに入れたプロセスの長い説明があります。
#!/bin/bash
if [ -z "$1" ]; then
echo "missing argument: subdirectory to remove"
exit
fi
git filter-branch --tree-filter 'rm -rf $1' --prune-empty HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
echo $1/ >> .gitignore
git add .gitignore
git commit -m 'Removing $1 from git history'
git gc
git push origin master --force
明らかなエラーなしで実行し、リポジトリを複製し、.git/objectsディレクトリのサイズが縮小しないことを発見しました。
スクリプトに何か抜けたものがありますか?はい私何が欠けていますか?最新バージョンのgitでは、これらのニーズに合ったより直接的な機能を導入していますか?
別の方法がありますか?
答え1
この答えはindex-filter
私にとって効果的で、他の人はそうではありませんでした。