这个存储库有一个大文件的大子目录,几个月前我从提交中删除了这些文件,现在我想从存储库中永远删除它。庞大的子目录不再在下载中,但对象目录是巨大的。
签出/克隆需要很长时间,我相信这是因为 .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
对我有用,而其他人却没有: