StackExchange 上的许多答案都涉及从历史记录中的所有提交中删除给定文件,例如:
git filter-branch --prune-empty -d /dev/shm/scratch \
--index-filter "git rm --cached -f --ignore-unmatch filename" \
--tag-name-filter cat -- --all
然而,随着时间的推移,我的存储库有大量数据推入其中,我希望通过过滤掉所有不在当前工作树中的文件来显着减小其大小。
在手册页中,这可以通过以下方式针对索引完成:
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
从我可以收集到的第一部分获取所有已删除文件的名称,第二部分将它们从缓存版本中删除。
我无法完全解决的是如何更改 rm 命令的过滤器分支版本,以确保它将索引的版本与头部进行比较(从而删除所有已删除的文件)。
这样做的目的是删除历史记录中当前工作树中不存在的所有文件。