我想从git存储库的历史记录中删除目录及其内容,以减小此git存储库的大小。 (该目录包含二进制资产,例如模型和纹理,并且贡献最多,达到了git存储库的大小。)
git filter-branch --tree-filter 'rm -rf the_directory' --prune-empty HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
echo the_directory/ >> .gitignore
git add .gitignore
git commit -m 'Removing the_directory from git history'
git gc
git push origin master --force
这似乎有效,因为我在Github的提交历史记录中找不到任何对此目录及其内容的引用。 (我有超过1500次提交,目录总是存在,但不再存在。我甚至找不到提交,我明确删除了目录(从存储库中删除而不是从历史记录中删除)。)
不幸的是,根据Github,存储库的大小没有改变。我仍然有一个450MB的PACK
文件(而实际的存储库现在低于14MB)。
我使用以下git
命令查找最大的文件:
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
git rev-list --objects --all | grep the_id
结论最大的文件仍然位于我想要摆脱的目录中?
我尝试了各种方法:
但是PACK
文件保持不变或变得更大(~500MB)。
如何减少PACK
文件的大小,从而缩小我的git存储库的大小,更具体地说,从PACK
文件中删除目录及其删除内容中包含的文件?
答案 0 :(得分:1)
您可以尝试BFG Repo-Cleaner及其--delete-folders
选项:
(在一个裸的克隆回购,你的回购副本进行测试)
bfg --delete-folders the_directory --delete-files the_directory --no-blob-protection my-repo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
默认情况下会更新您的提交以及所有分支和标记。