git 从存储库历史记录中删除一个大子目录,该子目录在多次提交前已被删除

git 从存储库历史记录中删除一个大子目录,该子目录在多次提交前已被删除

这个存储库有一个大文件的大子目录,几个月前我从提交中删除了这些文件,现在我想从存储库中永远删除它。庞大的子目录不再在下载中,但对象目录是巨大的。

签出/克隆需要很长时间,我相信这是因为 .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对我有用,而其他人却没有:

https://stackoverflow.com/a/32886427/4386557

相关内容