我们当前的 repo 有数以万计的提交,并且一个新的克隆传输了近一个 gig 的数据(有很多 jar 文件在历史上已经被删除)。我们想通过创建一个新的 repo 来减少这个大小,该 repo 只保留 repo 中当前活动文件的完整历史记录,或者可能只是修改当前 repo 以清除已删除的文件历史记录。但我不确定如何在实际庄园中做到这一点。
我已经尝试过从 git 历史记录中删除已删除文件中的脚本:
for del in `cat deleted.txt`
do
git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
# The following seems to be necessary every time
# because otherwise git won't overwrite refs/original
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
done;
但是鉴于我们在历史记录中有数万个已删除文件和数万次提交,运行脚本将需要很长时间。我在 2 小时前开始只为一个已删除的文件运行此命令,并且 filter-branch 命令仍在运行,它一次通过 40,000 多个提交中的每一个,这是在带有 SSD 驱动器的新 Macbook pro 上。
我还阅读了页面https://help.github.com/articles/remove-sensitive-data但这仅适用于删除单个文件。
有没有人能够做到这一点?我真的很想保留当前跟踪文件的历史记录,如果我们不能保留历史记录,我不确定节省空间的好处是否值得创建一个新的存储库。